Browse code

Added logic to build package if sub-packages are not available

Change-Id: I5378e67c650d5fb5bd5d61f3806ed3206501c9a6
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/1840
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Divya Thaluru <dthaluru@vmware.com>

dthaluru authored on 2016/12/09 09:42:50
Showing 1 changed files
... ...
@@ -9,7 +9,7 @@ from Scheduler import Scheduler
9 9
 from ThreadPool import ThreadPool
10 10
 
11 11
 class PackageManager(object):
12
-    
12
+
13 13
     def __init__(self,logName=None,logPath=None):
14 14
         if logName is None:
15 15
             logName = "PackageManager"
... ...
@@ -27,8 +27,8 @@ class PackageManager(object):
27 27
         self.mapThreadsLaunchTime={}
28 28
         self.listAvailableCyclicPackages=[]
29 29
         self.listBuildOptionPackages=[]
30
-        self.pkgBuildOptionFile="" 
31
-        
30
+        self.pkgBuildOptionFile=""
31
+
32 32
     def readPackageBuildData(self, listPackages):
33 33
         try:
34 34
             pkgBuildDataGen = PackageBuildDataGenerator(self.logName,self.logPath)
... ...
@@ -37,15 +37,16 @@ class PackageManager(object):
37 37
             self.logger.error("unable to get sorted list")
38 38
             return False
39 39
         return True
40
-    
40
+
41 41
     def readAlreadyAvailablePackages(self):
42 42
         listAvailablePackages=[]
43
+        listFoundRPMPackages=[]
43 44
         listRPMFiles=[]
44 45
         listDirectorys=[]
45 46
         listDirectorys.append(constants.rpmPath)
46 47
         if constants.inputRPMSPath is not None:
47 48
             listDirectorys.append(constants.inputRPMSPath)
48
-        
49
+
49 50
         while len(listDirectorys) > 0:
50 51
             dirPath=listDirectorys.pop()
51 52
             for dirEntry in os.listdir(dirPath):
... ...
@@ -61,7 +62,19 @@ class PackageManager(object):
61 61
                 specVersion=constants.specData.getVersion(package)
62 62
                 specRelease=constants.specData.getRelease(package)
63 63
                 if version == specVersion and release == specRelease:
64
-                    listAvailablePackages.append(package)
64
+                    listFoundRPMPackages.append(package)
65
+        #Mark package available only if all sub packages are available
66
+        for package in listFoundRPMPackages:
67
+            basePkg = constants.specData.getSpecName(package)
68
+            if basePkg in listAvailablePackages:
69
+                continue;
70
+            listRPMPackages = constants.specData.getRPMPackages(basePkg)
71
+            packageIsAlreadyBuilt = True
72
+            for rpmpkg in listRPMPackages:
73
+                if rpmpkg not in listFoundRPMPackages:
74
+                    packageIsAlreadyBuilt = False
75
+            if packageIsAlreadyBuilt:
76
+                listAvailablePackages.append(package)
65 77
         self.logger.info("List of Already built packages")
66 78
         self.logger.info(listAvailablePackages)
67 79
         return listAvailablePackages
... ...
@@ -96,11 +109,11 @@ class PackageManager(object):
96 96
         for pkg in listPackages:
97 97
             if pkg in self.listOfPackagesAlreadyBuilt:
98 98
                 listPackagesToBuild.remove(pkg)
99
-        
99
+
100 100
         if not self.readPackageBuildData(listPackagesToBuild):
101 101
             return False
102 102
         return True
103
-    
103
+
104 104
     def buildToolChain(self):
105 105
         try:
106 106
             tUtils=ToolChainUtils()
... ...
@@ -109,17 +122,17 @@ class PackageManager(object):
109 109
             self.logger.error("Unable to build tool chain")
110 110
             self.logger.error(e)
111 111
             raise e
112
-    
112
+
113 113
     def buildToolChainPackages(self, listBuildOptionPackages, pkgBuildOptionFile, buildThreads):
114 114
         self.buildToolChain()
115 115
         self.buildGivenPackages(constants.listToolChainPackages, buildThreads)
116
-        
116
+
117 117
     def buildPackages(self,listPackages, listBuildOptionPackages, pkgBuildOptionFile, buildThreads):
118 118
         self.listBuildOptionPackages = listBuildOptionPackages
119 119
         self.pkgBuildOptionFile = pkgBuildOptionFile
120 120
         self.buildToolChainPackages(listBuildOptionPackages, pkgBuildOptionFile, buildThreads)
121 121
         self.buildGivenPackages(listPackages, buildThreads)
122
-    
122
+
123 123
     def initializeThreadPool(self,statusEvent):
124 124
         ThreadPool.clear()
125 125
         ThreadPool.mapPackageToCycle=self.mapPackageToCycle
... ...
@@ -128,57 +141,57 @@ class PackageManager(object):
128 128
         ThreadPool.pkgBuildOptionFile=self.pkgBuildOptionFile
129 129
         ThreadPool.logger=self.logger
130 130
         ThreadPool.statusEvent=statusEvent
131
-        
131
+
132 132
     def initializeScheduler(self,statusEvent):
133 133
         Scheduler.setLog(self.logName, self.logPath)
134 134
         Scheduler.setParams(self.sortedPackageList, self.listOfPackagesAlreadyBuilt)
135 135
         Scheduler.setEvent(statusEvent)
136 136
         Scheduler.stopScheduling=False
137
-    
137
+
138 138
     def buildGivenPackages (self, listPackages, buildThreads):
139 139
         returnVal=self.calculateParams(listPackages)
140 140
         if not returnVal:
141 141
             self.logger.error("Unable to set paramaters. Terminating the package manager.")
142 142
             raise Exception("Unable to set paramaters")
143
-        
143
+
144 144
         statusEvent=threading.Event()
145 145
         self.initializeScheduler(statusEvent)
146 146
         self.initializeThreadPool(statusEvent)
147
-        
147
+
148 148
         i=0
149 149
         while i < buildThreads:
150 150
             workerName="WorkerThread"+str(i)
151 151
             ThreadPool.addWorkerThread(workerName)
152 152
             ThreadPool.startWorkerThread(workerName)
153 153
             i = i + 1
154
-        
154
+
155 155
         statusEvent.wait()
156 156
         Scheduler.stopScheduling=True
157 157
         self.logger.info("Waiting for all remaining worker threads")
158 158
         listWorkerObjs=ThreadPool.getAllWorkerObjects()
159 159
         for w in listWorkerObjs:
160 160
             w.join()
161
-            
161
+
162 162
         setFailFlag=False
163 163
         allPackagesBuilt=False
164
-        
164
+
165 165
         if Scheduler.isAnyPackagesFailedToBuild():
166 166
             setFailFlag=True
167
-        
167
+
168 168
         if Scheduler.isAllPackagesBuilt():
169 169
             allPackagesBuilt=True
170
-        
170
+
171 171
         if setFailFlag:
172 172
             self.logger.error("Some of the packages failed:")
173 173
             self.logger.error(Scheduler.listOfFailedPackages)
174 174
             raise Exception("Failed during building package")
175
-        
175
+
176 176
         if not setFailFlag:
177 177
             if allPackagesBuilt:
178 178
                 self.logger.info("All packages built successfully")
179 179
             else:
180 180
                 self.logger.error("Build stopped unexpectedly.Unknown error.")
181 181
                 raise Exception("Unknown error")
182
-        
182
+
183 183
         self.logger.info("Terminated")
184 184