Browse code

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

Change-Id: Iadd7b44a332c47838e99a96b1c4faabb32b69f3e
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/1839
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
... ...
@@ -74,7 +87,7 @@ class PackageManager(object):
74 74
         self.mapCyclesToPackageList.clear()
75 75
         self.mapPackageToCycle.clear()
76 76
         self.sortedPackageList=[]
77
-        
77
+
78 78
         listOfPackagesAlreadyBuilt = []
79 79
         listOfPackagesAlreadyBuilt = self.readAlreadyAvailablePackages()
80 80
         self.listOfPackagesAlreadyBuilt = listOfPackagesAlreadyBuilt[:]
... ...
@@ -187,7 +200,7 @@ class PackageManager(object):
187 187
             self.logger.error("Some of the packages failed:")
188 188
             self.logger.error(Scheduler.listOfFailedPackages)
189 189
             raise Exception("Failed during building package")
190
-        
190
+
191 191
         if not setFailFlag:
192 192
             if allPackagesBuilt:
193 193
                 self.logger.info("All packages built successfully")