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>
| ... | ... |
@@ -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")
|