Change-Id: I87250c1b97c52d9d1a1c6db0a3d9d01c818ce033
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/5763
Reviewed-by: Sharath George
Tested-by: Sharath George
| ... | ... |
@@ -21,7 +21,7 @@ Requires: jansson |
| 21 | 21 |
Requires: likewise-open >= 6.2.9 |
| 22 | 22 |
Requires: netmgmt |
| 23 | 23 |
Requires: systemd |
| 24 |
-Requires: tdnf >= 2.2.0 |
|
| 24 |
+Requires: tdnf >= 2.0.0 |
|
| 25 | 25 |
Requires: lightwave-client-libs |
| 26 | 26 |
Requires: %{name}-libs = %{version}-%{release}
|
| 27 | 27 |
Requires: shadow |
| ... | ... |
@@ -101,19 +101,19 @@ def buildPackagesList(csvFilename): |
| 101 | 101 |
listPackages.sort() |
| 102 | 102 |
for package in listPackages: |
| 103 | 103 |
name = package |
| 104 |
- version = SPECS.getData().getVersion(package) |
|
| 105 |
- packagelicense = SPECS.getData().getLicense(package) |
|
| 106 |
- listPatches = SPECS.getData().getPatches(package) |
|
| 107 |
- url = SPECS.getData().getURL(package) |
|
| 108 |
- listSourceNames = SPECS.getData().getSources(package) |
|
| 109 |
- sources = "" |
|
| 110 |
- patches = "" |
|
| 111 |
- if listPatches is not None: |
|
| 112 |
- patches = " ".join(listPatches) |
|
| 113 |
- if listSourceNames is not None: |
|
| 114 |
- sources = " ".join(listSourceNames) |
|
| 115 |
- csvFile.write(name + "," + version + "," + packagelicense + "," + url + "," + |
|
| 116 |
- sources + "," + patches + "\n") |
|
| 104 |
+ for version in SPECS.getData().getVersions(package): |
|
| 105 |
+ packagelicense = SPECS.getData().getLicense(package, version) |
|
| 106 |
+ listPatches = SPECS.getData().getPatches(package, version) |
|
| 107 |
+ url = SPECS.getData().getURL(package, version) |
|
| 108 |
+ listSourceNames = SPECS.getData().getSources(package, version) |
|
| 109 |
+ sources = "" |
|
| 110 |
+ patches = "" |
|
| 111 |
+ if listPatches is not None: |
|
| 112 |
+ patches = " ".join(listPatches) |
|
| 113 |
+ if listSourceNames is not None: |
|
| 114 |
+ sources = " ".join(listSourceNames) |
|
| 115 |
+ csvFile.write(name + "," + version + "," + packagelicense + "," + url + "," + |
|
| 116 |
+ sources + "," + patches + "\n") |
|
| 117 | 117 |
|
| 118 | 118 |
def readBlackListPackages(pkgBlackListFile): |
| 119 | 119 |
blackListPkgs = [] |
| ... | ... |
@@ -139,39 +139,39 @@ def buildSourcesList(yamlDir, blackListPkgs, logger, singleFile=True): |
| 139 | 139 |
if package in blackListPkgs: |
| 140 | 140 |
continue |
| 141 | 141 |
ossname = package |
| 142 |
- ossversion = SPECS.getData().getVersion(package) |
|
| 143 |
- modified = False |
|
| 144 |
- listPatches = SPECS.getData().getPatches(package) |
|
| 145 |
- if listPatches: |
|
| 146 |
- modified = True |
|
| 147 |
- url = SPECS.getData().getSourceURL(package) |
|
| 148 |
- if url is None: |
|
| 149 |
- url = SPECS.getData().getURL(package) |
|
| 150 |
- |
|
| 151 |
- sourceName = None |
|
| 152 |
- listSourceNames = SPECS.getData().getSources(package) |
|
| 153 |
- if listSourceNames: |
|
| 154 |
- sourceName = listSourceNames[0] |
|
| 155 |
- sha1 = SPECS.getData().getSHA1(package, sourceName) |
|
| 156 |
- if sha1 is not None: |
|
| 157 |
- PullSources.get(package, sourceName, sha1, yamlSourceDir, |
|
| 158 |
- constants.pullsourcesConfig, logger) |
|
| 159 |
- |
|
| 160 |
- if not singleFile: |
|
| 161 |
- yamlFile = open(yamlSourceDir + "/" + ossname + "-" + ossversion + ".yaml", "w") |
|
| 162 |
- yamlFile.write("vmwsource:" + ossname + ":" + ossversion + ":\n")
|
|
| 163 |
- yamlFile.write(" repository: VMWsource\n")
|
|
| 164 |
- yamlFile.write(" name: '" + ossname + "'\n")
|
|
| 165 |
- yamlFile.write(" version: '" + ossversion + "'\n")
|
|
| 166 |
- yamlFile.write(" url: " + str(url) + "\n")
|
|
| 167 |
- yamlFile.write(" license: UNKNOWN\n")
|
|
| 168 |
- if sourceName is not None: |
|
| 169 |
- yamlFile.write(" vmwsource-distribution: " + str(sourceName) + "\n")
|
|
| 170 |
- if modified: |
|
| 171 |
- yamlFile.write(" modified: true\n")
|
|
| 172 |
- yamlFile.write("\n")
|
|
| 173 |
- if not singleFile: |
|
| 174 |
- yamlFile.close() |
|
| 142 |
+ for version in SPECS.getData().getVersions(package): |
|
| 143 |
+ modified = False |
|
| 144 |
+ listPatches = SPECS.getData().getPatches(package, version) |
|
| 145 |
+ if listPatches: |
|
| 146 |
+ modified = True |
|
| 147 |
+ url = SPECS.getData().getSourceURL(package, version) |
|
| 148 |
+ if url is None: |
|
| 149 |
+ url = SPECS.getData().getURL(package, version) |
|
| 150 |
+ |
|
| 151 |
+ sourceName = None |
|
| 152 |
+ listSourceNames = SPECS.getData().getSources(package, version) |
|
| 153 |
+ if listSourceNames: |
|
| 154 |
+ sourceName = listSourceNames[0] |
|
| 155 |
+ sha1 = SPECS.getData().getSHA1(package, version, sourceName) |
|
| 156 |
+ if sha1 is not None: |
|
| 157 |
+ PullSources.get(package, sourceName, sha1, yamlSourceDir, |
|
| 158 |
+ constants.pullsourcesConfig, logger) |
|
| 159 |
+ |
|
| 160 |
+ if not singleFile: |
|
| 161 |
+ yamlFile = open(yamlSourceDir + "/" + ossname + "-" + version + ".yaml", "w") |
|
| 162 |
+ yamlFile.write("vmwsource:" + ossname + ":" + version + ":\n")
|
|
| 163 |
+ yamlFile.write(" repository: VMWsource\n")
|
|
| 164 |
+ yamlFile.write(" name: '" + ossname + "'\n")
|
|
| 165 |
+ yamlFile.write(" version: '" + ossversion + "'\n")
|
|
| 166 |
+ yamlFile.write(" url: " + str(url) + "\n")
|
|
| 167 |
+ yamlFile.write(" license: UNKNOWN\n")
|
|
| 168 |
+ if sourceName is not None: |
|
| 169 |
+ yamlFile.write(" vmwsource-distribution: " + str(sourceName) + "\n")
|
|
| 170 |
+ if modified: |
|
| 171 |
+ yamlFile.write(" modified: true\n")
|
|
| 172 |
+ yamlFile.write("\n")
|
|
| 173 |
+ if not singleFile: |
|
| 174 |
+ yamlFile.close() |
|
| 175 | 175 |
|
| 176 | 176 |
if singleFile: |
| 177 | 177 |
yamlFile.close() |
| ... | ... |
@@ -192,7 +192,7 @@ def buildSRPMList(srpmPath, yamlDir, blackListPkgs, logger, singleFile=True): |
| 192 | 192 |
continue |
| 193 | 193 |
ossname = package |
| 194 | 194 |
ossversion = SPECS.getData().getVersion(package) |
| 195 |
- ossrelease = SPECS.getData().getRelease(package) |
|
| 195 |
+ ossrelease = SPECS.getData().getRelease(package, ossversion) |
|
| 196 | 196 |
|
| 197 | 197 |
listFoundSRPMFiles = cmdUtils.findFile(ossname + "-" + ossversion + "-" + ossrelease |
| 198 | 198 |
+ ".src.rpm", |
| ... | ... |
@@ -4,6 +4,7 @@ from collections import OrderedDict |
| 4 | 4 |
from Logger import Logger |
| 5 | 5 |
from constants import constants |
| 6 | 6 |
from SpecData import SPECS |
| 7 |
+from StringUtils import StringUtils |
|
| 7 | 8 |
|
| 8 | 9 |
def removeDuplicateEntries(myList): |
| 9 | 10 |
myListCopy = list(OrderedDict.fromkeys(myList)) |
| ... | ... |
@@ -27,10 +28,9 @@ class PackageBuildDataGenerator(object): |
| 27 | 27 |
self.__sortedBuildDependencyGraph = {}
|
| 28 | 28 |
|
| 29 | 29 |
def getPackageBuildData(self, listPackages): |
| 30 |
- basePackages = set() |
|
| 30 |
+ basePackages = [] |
|
| 31 | 31 |
for pkg in listPackages: |
| 32 |
- basePackage = SPECS.getData().getSpecName(pkg) |
|
| 33 |
- basePackages.add(basePackage) |
|
| 32 |
+ basePackages.append(SPECS.getData().getBasePkg(pkg)) |
|
| 34 | 33 |
|
| 35 | 34 |
self._readDependencyGraphAndCyclesForGivenPackages(basePackages) |
| 36 | 35 |
self._getSortedBuildOrderList() |
| ... | ... |
@@ -46,7 +46,7 @@ class PackageBuildDataGenerator(object): |
| 46 | 46 |
sortListForPkg = [] |
| 47 | 47 |
|
| 48 | 48 |
for p in runTimeDepPkgList: |
| 49 |
- basePkg = SPECS.getData().getSpecName(p) |
|
| 49 |
+ basePkg = SPECS.getData().getBasePkg(p) |
|
| 50 | 50 |
for bPkg in self.__sortedBuildDependencyGraph[basePkg]: |
| 51 | 51 |
if bPkg not in sortListForPkg: |
| 52 | 52 |
sortListForPkg.append(bPkg) |
| ... | ... |
@@ -118,7 +118,7 @@ class PackageBuildDataGenerator(object): |
| 118 | 118 |
self.logger.info("Removing duplicates in sorted list")
|
| 119 | 119 |
sortedList = removeDuplicateEntries(sortedList) |
| 120 | 120 |
|
| 121 |
- self.logger.info("Sorted list:")
|
|
| 121 |
+ self.logger.info("Sorted list: ")
|
|
| 122 | 122 |
self.logger.info(sortedList) |
| 123 | 123 |
self.__sortedPackageList = sortedList |
| 124 | 124 |
|
| ... | ... |
@@ -129,28 +129,25 @@ class PackageBuildDataGenerator(object): |
| 129 | 129 |
addBuildTimeGraph = False |
| 130 | 130 |
if basePackage in self.__runTimeDependencyGraph: |
| 131 | 131 |
addRunTimeGraph = False |
| 132 |
- |
|
| 132 |
+ |
|
| 133 | 133 |
nextPackagesToConstructGraph = set() |
| 134 | 134 |
if addBuildTimeGraph: |
| 135 |
- dependentRpmPackages = SPECS.getData().getBuildRequiresForPackage(basePackage) |
|
| 135 |
+ dependentRpmPackages = SPECS.getData().getBuildRequiresForPkg(basePackage) |
|
| 136 | 136 |
dependentPackages = set() |
| 137 |
- for rpmPkg in dependentRpmPackages: |
|
| 138 |
- basePkg = SPECS.getData().getSpecName(rpmPkg.package) |
|
| 139 |
- dependentPackages.add(basePkg) |
|
| 137 |
+ for dependentPkg in dependentRpmPackages: |
|
| 138 |
+ dependentPackages.add(SPECS.getData().getBasePkg(dependentPkg)) |
|
| 140 | 139 |
self.__buildDependencyGraph[basePackage] = dependentPackages |
| 141 | 140 |
nextPackagesToConstructGraph.update(dependentPackages) |
| 142 | 141 |
|
| 143 | 142 |
if addRunTimeGraph: |
| 144 |
- rpmPackages = SPECS.getData().getPackages(basePackage) |
|
| 143 |
+ packageName, packageVersion = StringUtils.splitPackageNameAndVersion(basePackage) |
|
| 144 |
+ rpmPackages = SPECS.getData().getPackages(packageName, packageVersion) |
|
| 145 | 145 |
dependentPackages = set() |
| 146 |
- dependentRpmPackagesNames= set() |
|
| 147 | 146 |
for rpmPkg in rpmPackages: |
| 148 |
- dependentRpmPackages = SPECS.getData().getRequiresAllForPackage(rpmPkg) |
|
| 149 |
- for pkgName in dependentRpmPackages: |
|
| 150 |
- dependentRpmPackagesNames.add(pkgName.package) |
|
| 151 |
- self.__runTimeDependencyGraph[rpmPkg] = copy.copy(dependentRpmPackagesNames) |
|
| 152 |
- for pkg in dependentRpmPackagesNames: |
|
| 153 |
- dependentPackages.add(SPECS.getData().getSpecName(pkg)) |
|
| 147 |
+ dependentRpmPackages = SPECS.getData().getRequiresAllForPackage(rpmPkg, packageVersion) |
|
| 148 |
+ self.__runTimeDependencyGraph[rpmPkg+"-"+packageVersion] = copy.copy(set(dependentRpmPackages)) |
|
| 149 |
+ for pkg in dependentRpmPackages: |
|
| 150 |
+ dependentPackages.add(SPECS.getData().getBasePkg(pkg)) |
|
| 154 | 151 |
nextPackagesToConstructGraph.update(dependentPackages) |
| 155 | 152 |
|
| 156 | 153 |
for pkg in nextPackagesToConstructGraph: |
| ... | ... |
@@ -9,6 +9,7 @@ from constants import constants |
| 9 | 9 |
from SpecData import SPECS |
| 10 | 10 |
import docker |
| 11 | 11 |
from distutils.version import LooseVersion |
| 12 |
+from StringUtils import StringUtils |
|
| 12 | 13 |
|
| 13 | 14 |
class PackageBuilderBase(object): |
| 14 | 15 |
def __init__(self, mapPackageToCycles, pkgBuildType): |
| ... | ... |
@@ -17,46 +18,50 @@ class PackageBuilderBase(object): |
| 17 | 17 |
self.logPath = None |
| 18 | 18 |
self.logger = None |
| 19 | 19 |
self.package = None |
| 20 |
+ self.version = None |
|
| 20 | 21 |
self.mapPackageToCycles = mapPackageToCycles |
| 21 | 22 |
self.listNodepsPackages = ["glibc", "gmp", "zlib", "file", "binutils", "mpfr", |
| 22 | 23 |
"mpc", "gcc", "ncurses", "util-linux", "groff", "perl", |
| 23 | 24 |
"texinfo", "rpm", "openssl", "go"] |
| 24 | 25 |
self.pkgBuildType = pkgBuildType |
| 25 | 26 |
|
| 26 |
- def buildPackageFunction(self, package): |
|
| 27 |
- self._buildPackagePrepareFunction(package) |
|
| 28 |
- versions = self.getNumOfVersions(package) |
|
| 29 |
- if(versions < 1): |
|
| 30 |
- raise Exception("No package exists")
|
|
| 31 |
- for version in range(0, versions): |
|
| 32 |
- try: |
|
| 33 |
- self._buildPackage(version) |
|
| 34 |
- except Exception as e: |
|
| 35 |
- # TODO: self.logger might be None |
|
| 36 |
- self.logger.exception(e) |
|
| 37 |
- raise e |
|
| 27 |
+ def buildPackageFunction(self, pkg): |
|
| 28 |
+ packageName, packageVersion = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 29 |
+ #do not build if RPM is already built |
|
| 30 |
+ #test only if the package is in the testForceRPMS with rpmCheck |
|
| 31 |
+ #build only if the package is not in the testForceRPMS with rpmCheck |
|
| 32 |
+ if self._checkIfPackageIsAlreadyBuilt(packageName, packageVersion): |
|
| 33 |
+ if not constants.rpmCheck: |
|
| 34 |
+ return |
|
| 35 |
+ elif constants.rpmCheck and self.package not in constants.testForceRPMS: |
|
| 36 |
+ return |
|
| 38 | 37 |
|
| 39 |
- def _buildPackagePrepareFunction(self, package): |
|
| 38 |
+ self._buildPackagePrepareFunction(packageName, packageVersion) |
|
| 39 |
+ try: |
|
| 40 |
+ self._buildPackage() |
|
| 41 |
+ except Exception as e: |
|
| 42 |
+ # TODO: self.logger might be None |
|
| 43 |
+ self.logger.exception(e) |
|
| 44 |
+ raise e |
|
| 45 |
+ |
|
| 46 |
+ def _buildPackagePrepareFunction(self, package, version): |
|
| 40 | 47 |
self.package = package |
| 41 |
- self.logName = "build-" + package |
|
| 42 |
- self.logPath = constants.logPath + "/build-" + package |
|
| 48 |
+ self.version = version |
|
| 49 |
+ self.logName = "build-" + package + "-" + version |
|
| 50 |
+ self.logPath = constants.logPath + "/" + package + "-" + version |
|
| 43 | 51 |
if not os.path.isdir(self.logPath): |
| 44 | 52 |
cmdUtils = CommandUtils() |
| 45 | 53 |
cmdUtils.runCommandInShell("mkdir -p " + self.logPath)
|
| 46 | 54 |
self.logger = Logger.getLogger(self.logName, self.logPath) |
| 47 | 55 |
|
| 48 |
- def _findPackageNameFromRPMFile(self, rpmfile): |
|
| 56 |
+ def _findPackageNameAndVersionFromRPMFile(self, rpmfile): |
|
| 49 | 57 |
rpmfile = os.path.basename(rpmfile) |
| 50 | 58 |
releaseindex = rpmfile.rfind("-")
|
| 51 | 59 |
if releaseindex == -1: |
| 52 | 60 |
self.logger.error("Invalid rpm file:" + rpmfile)
|
| 53 | 61 |
return None |
| 54 |
- versionindex = rpmfile[0:releaseindex].rfind("-")
|
|
| 55 |
- if versionindex == -1: |
|
| 56 |
- self.logger.error("Invalid rpm file:" + rpmfile)
|
|
| 57 |
- return None |
|
| 58 |
- packageName = rpmfile[0:versionindex] |
|
| 59 |
- return packageName |
|
| 62 |
+ pkg = rpmfile[0:releaseindex] |
|
| 63 |
+ return pkg |
|
| 60 | 64 |
|
| 61 | 65 |
def _findInstalledPackages(self, instanceID): |
| 62 | 66 |
pkgUtils = PackageUtils(self.logName, self.logPath) |
| ... | ... |
@@ -66,40 +71,45 @@ class PackageBuilderBase(object): |
| 66 | 66 |
listInstalledRPMs = pkgUtils.findInstalledRPMPackagesInContainer(instanceID) |
| 67 | 67 |
listInstalledPackages = [] |
| 68 | 68 |
for installedRPM in listInstalledRPMs: |
| 69 |
- packageName = self._findPackageNameFromRPMFile(installedRPM) |
|
| 70 |
- if packageName is not None: |
|
| 71 |
- listInstalledPackages.append(packageName) |
|
| 69 |
+ pkg = self._findPackageNameAndVersionFromRPMFile(installedRPM) |
|
| 70 |
+ if pkg is not None: |
|
| 71 |
+ listInstalledPackages.append(pkg) |
|
| 72 | 72 |
return listInstalledPackages, listInstalledRPMs |
| 73 | 73 |
|
| 74 |
- def _checkIfPackageIsAlreadyBuilt(self, index=0): |
|
| 75 |
- basePkg = SPECS.getData().getSpecName(self.package) |
|
| 76 |
- listRPMPackages = SPECS.getData().getRPMPackages(basePkg, index) |
|
| 74 |
+ def _checkIfPackageIsAlreadyBuilt(self, package, version): |
|
| 75 |
+ basePkg = SPECS.getData().getSpecName(package) |
|
| 76 |
+ listRPMPackages = SPECS.getData().getRPMPackages(basePkg, version) |
|
| 77 | 77 |
packageIsAlreadyBuilt = True |
| 78 |
- pkgUtils = PackageUtils(self.logName, self.logPath) |
|
| 78 |
+ pkgUtils = PackageUtils() |
|
| 79 | 79 |
for pkg in listRPMPackages: |
| 80 |
- if pkgUtils.findRPMFileForGivenPackage(pkg,"*", index) is None: |
|
| 80 |
+ if pkgUtils.findRPMFileForGivenPackage(pkg, version) is None: |
|
| 81 | 81 |
packageIsAlreadyBuilt = False |
| 82 | 82 |
break |
| 83 | 83 |
return packageIsAlreadyBuilt |
| 84 | 84 |
|
| 85 |
- def _findRunTimeRequiredRPMPackages(self, rpmPackage, index=0): |
|
| 86 |
- return SPECS.getData().getRequiresForPackage(rpmPackage, index) |
|
| 85 |
+ def _findRunTimeRequiredRPMPackages(self, rpmPackage, version): |
|
| 86 |
+ return SPECS.getData().getRequiresForPackage(rpmPackage, version) |
|
| 87 | 87 |
|
| 88 |
- def _findBuildTimeRequiredPackages(self, index=0): |
|
| 89 |
- return SPECS.getData().getBuildRequiresForPackage(self.package, index) |
|
| 88 |
+ def _findBuildTimeRequiredPackages(self): |
|
| 89 |
+ return SPECS.getData().getBuildRequiresForPackage(self.package, self.version) |
|
| 90 | 90 |
|
| 91 |
- def _findBuildTimeCheckRequiredPackages(self, index=0): |
|
| 92 |
- return SPECS.getData().getCheckBuildRequiresForPackage(self.package, index) |
|
| 91 |
+ def _findBuildTimeCheckRequiredPackages(self): |
|
| 92 |
+ return SPECS.getData().getCheckBuildRequiresForPackage(self.package, self.version) |
|
| 93 | 93 |
|
| 94 | 94 |
def _installPackage(self, pkgUtils, package,packageVersion, instanceID, destLogPath, |
| 95 | 95 |
listInstalledPackages, listInstalledRPMs): |
| 96 |
- specificRPM = os.path.basename(pkgUtils.findRPMFileForGivenPackage(package,packageVersion)).replace(".rpm", "")
|
|
| 97 |
- if package in listInstalledPackages: |
|
| 96 |
+ rpmfile = pkgUtils.findRPMFileForGivenPackage(package,packageVersion); |
|
| 97 |
+ if rpmfile is None: |
|
| 98 |
+ self.logger.error("No rpm file found for package: " + package + "-" + packageVersion)
|
|
| 99 |
+ raise Exception("Missing rpm file")
|
|
| 100 |
+ specificRPM = os.path.basename(rpmfile.replace(".rpm", ""))
|
|
| 101 |
+ pkg = package+"-"+packageVersion |
|
| 102 |
+ if pkg in listInstalledPackages: |
|
| 98 | 103 |
return |
| 99 | 104 |
# mark it as installed - to avoid cyclic recursion |
| 100 |
- listInstalledPackages.append(package) |
|
| 105 |
+ listInstalledPackages.append(pkg) |
|
| 101 | 106 |
listInstalledRPMs.append(specificRPM) |
| 102 |
- self._installDependentRunTimePackages(pkgUtils, package, instanceID, destLogPath, |
|
| 107 |
+ self._installDependentRunTimePackages(pkgUtils, package, packageVersion, instanceID, destLogPath, |
|
| 103 | 108 |
listInstalledPackages, listInstalledRPMs) |
| 104 | 109 |
noDeps = False |
| 105 | 110 |
if (package in self.mapPackageToCycles or |
| ... | ... |
@@ -111,37 +121,41 @@ class PackageBuilderBase(object): |
| 111 | 111 |
elif self.pkgBuildType == "container": |
| 112 | 112 |
pkgUtils.prepRPMforInstallInContainer(package,packageVersion, instanceID, noDeps, destLogPath) |
| 113 | 113 |
|
| 114 |
- def _installDependentRunTimePackages(self, pkgUtils, package, instanceID, destLogPath, |
|
| 114 |
+ def _installDependentRunTimePackages(self, pkgUtils, package, packageVersion, instanceID, destLogPath, |
|
| 115 | 115 |
listInstalledPackages, listInstalledRPMs): |
| 116 |
- listRunTimeDependentPackages = self._findRunTimeRequiredRPMPackages(package) |
|
| 116 |
+ listRunTimeDependentPackages = self._findRunTimeRequiredRPMPackages(package, packageVersion) |
|
| 117 | 117 |
if listRunTimeDependentPackages: |
| 118 | 118 |
for pkg in listRunTimeDependentPackages: |
| 119 | 119 |
if pkg in self.mapPackageToCycles: |
| 120 | 120 |
continue |
| 121 |
+ packageName, packageVersion = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 121 | 122 |
latestPkgRPM = os.path.basename( |
| 122 |
- pkgUtils.findRPMFileForGivenPackage(pkg)).replace(".rpm", "")
|
|
| 123 |
+ pkgUtils.findRPMFileForGivenPackage(packageName, packageVersion)).replace(".rpm", "")
|
|
| 123 | 124 |
if pkg in listInstalledPackages and latestPkgRPM in listInstalledRPMs: |
| 124 | 125 |
continue |
| 125 |
- self._installPackage(pkgUtils, pkg,"*", instanceID, destLogPath,listInstalledPackages, listInstalledRPMs) |
|
| 126 |
+ self._installPackage(pkgUtils, packageName,packageVersion, instanceID, destLogPath,listInstalledPackages, listInstalledRPMs) |
|
| 126 | 127 |
|
| 127 |
- def _findDependentPackagesAndInstalledRPM(self, instanceID, index=0): |
|
| 128 |
+ def _findDependentPackagesAndInstalledRPM(self, instanceID): |
|
| 128 | 129 |
listInstalledPackages, listInstalledRPMs = self._findInstalledPackages(instanceID) |
| 129 | 130 |
self.logger.info(listInstalledPackages) |
| 130 |
- listDependentPackages = self._findBuildTimeRequiredPackages(index) |
|
| 131 |
+ listDependentPackages = self._findBuildTimeRequiredPackages() |
|
| 131 | 132 |
listTestPackages=[] |
| 132 | 133 |
if constants.rpmCheck and self.package in constants.testForceRPMS: |
| 133 |
- listDependentPackages.extend(self._findBuildTimeCheckRequiredPackages(index)) |
|
| 134 |
- testPackages = (set(constants.listMakeCheckRPMPkgtoInstall) - |
|
| 134 |
+ # One time optimization |
|
| 135 |
+ if constants.listMakeCheckRPMPkgWithVersionstoInstall is None: |
|
| 136 |
+ constants.listMakeCheckRPMPkgWithVersionstoInstalli=[] |
|
| 137 |
+ for package in constants.listMakeCheckRPMPkgtoInstall: |
|
| 138 |
+ version = SPECS.getData().getHighestVersion(package) |
|
| 139 |
+ constants.listMakeCheckRPMPkgWithVersionstoInstall.append(package+"-"+version) |
|
| 140 |
+ |
|
| 141 |
+ listDependentPackages.extend(self._findBuildTimeCheckRequiredPackages()) |
|
| 142 |
+ testPackages = (set(constants.listMakeCheckRPMPkgWithVersionstoInstall) - |
|
| 135 | 143 |
set(listInstalledPackages) - |
| 136 |
- set([self.package])) |
|
| 144 |
+ set([self.package+"-"+self.version])) |
|
| 137 | 145 |
listTestPackages=list(set(testPackages)) |
| 138 | 146 |
listDependentPackages = list(set(listDependentPackages)) |
| 139 | 147 |
return listDependentPackages, listTestPackages, listInstalledPackages, listInstalledRPMs |
| 140 | 148 |
|
| 141 |
- @staticmethod |
|
| 142 |
- def getNumOfVersions(package): |
|
| 143 |
- return SPECS.getData().getNumberOfVersions(package) |
|
| 144 |
- |
|
| 145 | 149 |
class PackageBuilderContainer(PackageBuilderBase): |
| 146 | 150 |
def __init__(self, mapPackageToCycles, pkgBuildType): |
| 147 | 151 |
self.buildContainerImage = "photon_build_container:latest" |
| ... | ... |
@@ -149,11 +163,11 @@ class PackageBuilderContainer(PackageBuilderBase): |
| 149 | 149 |
|
| 150 | 150 |
PackageBuilderBase.__init__(self, mapPackageToCycles, pkgBuildType) |
| 151 | 151 |
|
| 152 |
- def _prepareBuildContainer(self, containerTaskName, packageName, |
|
| 152 |
+ def _prepareBuildContainer(self, containerTaskName, packageName, packageVersion, |
|
| 153 | 153 |
isToolChainPackage=False): |
| 154 | 154 |
# Prepare an empty chroot environment to let docker use the BUILD folder. |
| 155 | 155 |
# This avoids docker using overlayFS which will cause make check failure. |
| 156 |
- chrootName = "build-" + packageName |
|
| 156 |
+ chrootName = packageName + "-" + packageVersion |
|
| 157 | 157 |
chrUtils = ChrootUtils(self.logName, self.logPath) |
| 158 | 158 |
returnVal, chrootID = chrUtils.createChroot(chrootName) |
| 159 | 159 |
if not returnVal: |
| ... | ... |
@@ -217,18 +231,7 @@ class PackageBuilderContainer(PackageBuilderBase): |
| 217 | 217 |
raise e |
| 218 | 218 |
return containerID, chrootID |
| 219 | 219 |
|
| 220 |
- def _buildPackage(self, index=0): |
|
| 221 |
- #do not build if RPM is already built |
|
| 222 |
- #test only if the package is in the testForceRPMS with rpmCheck |
|
| 223 |
- #build only if the package is not in the testForceRPMS with rpmCheck |
|
| 224 |
- if self._checkIfPackageIsAlreadyBuilt(index): |
|
| 225 |
- if not constants.rpmCheck: |
|
| 226 |
- self.logger.info("Skipping building the package:" + self.package)
|
|
| 227 |
- return |
|
| 228 |
- elif constants.rpmCheck and self.package not in constants.testForceRPMS: |
|
| 229 |
- self.logger.info("Skipping testing the package:" + self.package)
|
|
| 230 |
- return |
|
| 231 |
- |
|
| 220 |
+ def _buildPackage(self): |
|
| 232 | 221 |
#should initialize a logger based on package name |
| 233 | 222 |
containerTaskName = "build-" + self.package |
| 234 | 223 |
containerID = None |
| ... | ... |
@@ -239,7 +242,7 @@ class PackageBuilderContainer(PackageBuilderBase): |
| 239 | 239 |
destLogPath = constants.logPath + "/build-" + self.package |
| 240 | 240 |
try: |
| 241 | 241 |
containerID, chrootID = self._prepareBuildContainer( |
| 242 |
- containerTaskName, self.package, isToolChainPackage) |
|
| 242 |
+ containerTaskName, self.package, self.version, isToolChainPackage) |
|
| 243 | 243 |
|
| 244 | 244 |
tcUtils = ToolChainUtils(self.logName, self.logPath) |
| 245 | 245 |
if self.package in constants.perPackageToolChain: |
| ... | ... |
@@ -250,7 +253,7 @@ class PackageBuilderContainer(PackageBuilderBase): |
| 250 | 250 |
self.package) |
| 251 | 251 |
|
| 252 | 252 |
listDependentPackages, listTestPackages, listInstalledPackages, listInstalledRPMs = ( |
| 253 |
- self._findDependentPackagesAndInstalledRPM(containerID, index)) |
|
| 253 |
+ self._findDependentPackagesAndInstalledRPM(containerID)) |
|
| 254 | 254 |
|
| 255 | 255 |
pkgUtils = PackageUtils(self.logName, self.logPath) |
| 256 | 256 |
if listDependentPackages: |
| ... | ... |
@@ -258,29 +261,29 @@ class PackageBuilderContainer(PackageBuilderBase): |
| 258 | 258 |
"Installing dependent packages..") |
| 259 | 259 |
self.logger.info(listDependentPackages) |
| 260 | 260 |
for pkg in listDependentPackages: |
| 261 |
- properVersion=pkgUtils._getProperVersion(pkg.package,pkg) |
|
| 262 |
- self._installPackage(pkgUtils, pkg.package,properVersion, containerID, destLogPath,listInstalledPackages, listInstalledRPMs) |
|
| 261 |
+ packageName, packageVersion = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 262 |
+ self._installPackage(pkgUtils, packageName, packageVersion, containerID, destLogPath,listInstalledPackages, listInstalledRPMs) |
|
| 263 | 263 |
for pkg in listTestPackages: |
| 264 |
+ packageName, packageVersion = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 264 | 265 |
flag = False |
| 265 |
- for lineContent in listDependentPackages: |
|
| 266 |
- if lineContent.package == pkg: |
|
| 267 |
- properVersion=pkgUtils._getProperVersion(pkg,lineContent) |
|
| 268 |
- self._installPackage(pkgUtils, pkg,properVersion, containerID, destLogPath,listInstalledPackages, listInstalledRPMs) |
|
| 269 |
- flag = True |
|
| 270 |
- break; |
|
| 266 |
+ for depPkg in listDependentPackages: |
|
| 267 |
+ depPackageName, depPackageVersion = StringUtils.splitPackageNameAndVersion(depPkg) |
|
| 268 |
+ if depPackageName == packageName: |
|
| 269 |
+ flag = True |
|
| 270 |
+ break; |
|
| 271 | 271 |
if flag == False: |
| 272 |
- self._installPackage(pkgUtils, pkg,"*", containerID, destLogPath,listInstalledPackages, listInstalledRPMs) |
|
| 272 |
+ self._installPackage(pkgUtils, packageName,packageVersion, containerID, destLogPath,listInstalledPackages, listInstalledRPMs) |
|
| 273 | 273 |
pkgUtils.installRPMSInAOneShotInContainer(containerID, destLogPath) |
| 274 | 274 |
self.logger.info("Finished installing the build time dependent packages....")
|
| 275 | 275 |
|
| 276 | 276 |
self.logger.info("BuildContainer-buildPackage: Start building the package: " +
|
| 277 | 277 |
self.package) |
| 278 |
- pkgUtils.adjustGCCSpecsInContainer(self.package, containerID, destLogPath, index) |
|
| 278 |
+ pkgUtils.adjustGCCSpecsInContainer(self.package, self.version, containerID, destLogPath) |
|
| 279 | 279 |
pkgUtils.buildRPMSForGivenPackageInContainer( |
| 280 | 280 |
self.package, |
| 281 |
+ self.version, |
|
| 281 | 282 |
containerID, |
| 282 |
- destLogPath, |
|
| 283 |
- index) |
|
| 283 |
+ destLogPath) |
|
| 284 | 284 |
self.logger.info("BuildContainer-buildPackage: Successfully built the package: " +
|
| 285 | 285 |
self.package) |
| 286 | 286 |
except Exception as e: |
| ... | ... |
@@ -307,7 +310,7 @@ class PackageBuilderChroot(PackageBuilderBase): |
| 307 | 307 |
|
| 308 | 308 |
def _prepareBuildRoot(self): |
| 309 | 309 |
chrootID = None |
| 310 |
- chrootName = "build-" + self.package |
|
| 310 |
+ chrootName = self.package + "-" + self.version |
|
| 311 | 311 |
try: |
| 312 | 312 |
chrUtils = ChrootUtils(self.logName, self.logPath) |
| 313 | 313 |
returnVal, chrootID = chrUtils.createChroot(chrootName) |
| ... | ... |
@@ -315,7 +318,7 @@ class PackageBuilderChroot(PackageBuilderBase): |
| 315 | 315 |
if not returnVal: |
| 316 | 316 |
raise Exception("Unable to prepare build root")
|
| 317 | 317 |
tUtils = ToolChainUtils(self.logName, self.logPath) |
| 318 |
- tUtils.installToolChainRPMS(chrootID, self.package, self.logPath) |
|
| 318 |
+ tUtils.installToolChainRPMS(self.package, self.version, chrootID, self.logPath) |
|
| 319 | 319 |
except Exception as e: |
| 320 | 320 |
if chrootID is not None: |
| 321 | 321 |
self.logger.debug("Deleting chroot: " + chrootID)
|
| ... | ... |
@@ -323,48 +326,37 @@ class PackageBuilderChroot(PackageBuilderBase): |
| 323 | 323 |
raise e |
| 324 | 324 |
return chrootID |
| 325 | 325 |
|
| 326 |
- def _buildPackage(self, index=0): |
|
| 327 |
- #do not build if RPM is already built |
|
| 328 |
- #test only if the package is in the testForceRPMS with rpmCheck |
|
| 329 |
- #build only if the package is not in the testForceRPMS with rpmCheck |
|
| 330 |
- if self._checkIfPackageIsAlreadyBuilt(index): |
|
| 331 |
- if not constants.rpmCheck: |
|
| 332 |
- self.logger.info("Skipping building the package:" + self.package)
|
|
| 333 |
- return |
|
| 334 |
- elif constants.rpmCheck and self.package not in constants.testForceRPMS: |
|
| 335 |
- self.logger.info("Skipping testing the package:" + self.package)
|
|
| 336 |
- return |
|
| 337 |
- |
|
| 326 |
+ def _buildPackage(self): |
|
| 338 | 327 |
chrUtils = ChrootUtils(self.logName, self.logPath) |
| 339 | 328 |
chrootID = None |
| 340 | 329 |
try: |
| 341 | 330 |
chrootID = self._prepareBuildRoot() |
| 342 | 331 |
listDependentPackages, listTestPackages, listInstalledPackages, listInstalledRPMs = ( |
| 343 |
- self._findDependentPackagesAndInstalledRPM(chrootID, index)) |
|
| 332 |
+ self._findDependentPackagesAndInstalledRPM(chrootID)) |
|
| 344 | 333 |
|
| 345 | 334 |
pkgUtils = PackageUtils(self.logName, self.logPath) |
| 346 | 335 |
|
| 347 | 336 |
if listDependentPackages: |
| 348 | 337 |
self.logger.info("Installing the build time dependent packages......")
|
| 349 | 338 |
for pkg in listDependentPackages: |
| 350 |
- properVersion=pkgUtils._getProperVersion(pkg.package, pkg) |
|
| 351 |
- self._installPackage(pkgUtils, pkg.package,properVersion, chrootID, self.logPath,listInstalledPackages, listInstalledRPMs) |
|
| 339 |
+ packageName, packageVersion = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 340 |
+ self._installPackage(pkgUtils, packageName, packageVersion, chrootID, self.logPath,listInstalledPackages, listInstalledRPMs) |
|
| 352 | 341 |
for pkg in listTestPackages: |
| 353 | 342 |
flag = False |
| 354 |
- for lineContent in listDependentPackages: |
|
| 355 |
- if lineContent.package == pkg: |
|
| 356 |
- properVersion=pkgUtils._getProperVersion(pkg,lineContent) |
|
| 357 |
- self._installPackage(pkgUtils, pkg,properVersion, chrootID, self.logPath,listInstalledPackages, listInstalledRPMs) |
|
| 343 |
+ packageName, packageVersion = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 344 |
+ for depPkg in listDependentPackages: |
|
| 345 |
+ depPackageName, depPackageVersion = StringUtils.splitPackageNameAndVersion(depPkg) |
|
| 346 |
+ if depPackageName == packageName: |
|
| 358 | 347 |
flag = True |
| 359 | 348 |
break; |
| 360 | 349 |
if flag == False: |
| 361 |
- self._installPackage(pkgUtils, pkg,"*", chrootID, self.logPath,listInstalledPackages, listInstalledRPMs) |
|
| 350 |
+ self._installPackage(pkgUtils, packageName,packageVersion, chrootID, self.logPath,listInstalledPackages, listInstalledRPMs) |
|
| 362 | 351 |
pkgUtils.installRPMSInAOneShot(chrootID, self.logPath) |
| 363 | 352 |
self.logger.info("Finished installing the build time dependent packages....")
|
| 364 | 353 |
|
| 365 |
- pkgUtils.adjustGCCSpecs(self.package, chrootID, self.logPath, index) |
|
| 366 |
- pkgUtils.buildRPMSForGivenPackage(self.package, chrootID, |
|
| 367 |
- self.logPath, index) |
|
| 354 |
+ pkgUtils.adjustGCCSpecs(self.package, self.version, chrootID, self.logPath) |
|
| 355 |
+ pkgUtils.buildRPMSForGivenPackage(self.package, self.version, chrootID, |
|
| 356 |
+ self.logPath) |
|
| 368 | 357 |
self.logger.info("Successfully built the package:" + self.package)
|
| 369 | 358 |
except Exception as e: |
| 370 | 359 |
self.logger.error("Failed while building package:" + self.package)
|
| ... | ... |
@@ -24,8 +24,8 @@ class PackageInfo(object): |
| 24 | 24 |
listRPMFiles = [] |
| 25 | 25 |
cmdUtils = CommandUtils() |
| 26 | 26 |
for package in listPackages: |
| 27 |
- release = SPECS.getData().getRelease(package) |
|
| 28 | 27 |
version = SPECS.getData().getVersion(package) |
| 28 |
+ release = SPECS.getData().getRelease(package, version) |
|
| 29 | 29 |
listRPMPackages = SPECS.getData().getRPMPackages(package) |
| 30 | 30 |
srpmFileName = package + "-" + version + "-" + release + ".src.rpm" |
| 31 | 31 |
srpmFiles = cmdUtils.findFile(srpmFileName, constants.sourceRpmPath) |
| ... | ... |
@@ -12,6 +12,7 @@ from ToolChainUtils import ToolChainUtils |
| 12 | 12 |
from Scheduler import Scheduler |
| 13 | 13 |
from ThreadPool import ThreadPool |
| 14 | 14 |
from SpecData import SPECS |
| 15 |
+from StringUtils import StringUtils |
|
| 15 | 16 |
|
| 16 | 17 |
class PackageManager(object): |
| 17 | 18 |
|
| ... | ... |
@@ -79,57 +80,25 @@ class PackageManager(object): |
| 79 | 79 |
return False |
| 80 | 80 |
return True |
| 81 | 81 |
|
| 82 |
+ # Returns list of package names which spec file has all subpackages built |
|
| 83 |
+ # Returns set of package name and version like |
|
| 84 |
+ # ["name1-vers1", "name2-vers2",..] |
|
| 82 | 85 |
def _readAlreadyAvailablePackages(self): |
| 83 | 86 |
listAvailablePackages = set() |
| 84 |
- listFoundRPMPackages = set() |
|
| 85 |
- listRPMFiles = set() |
|
| 86 |
- listDirectorys = set() |
|
| 87 |
- mapPackageVersion={}
|
|
| 88 |
- mapPackageRelease={}
|
|
| 89 |
- listDirectorys.add(constants.rpmPath) |
|
| 90 |
- if constants.inputRPMSPath is not None: |
|
| 91 |
- listDirectorys.add(constants.inputRPMSPath) |
|
| 92 |
- |
|
| 93 |
- while listDirectorys: |
|
| 94 |
- dirPath = listDirectorys.pop() |
|
| 95 |
- for dirEntry in os.listdir(dirPath): |
|
| 96 |
- dirEntryPath = os.path.join(dirPath, dirEntry) |
|
| 97 |
- if os.path.isfile(dirEntryPath) and dirEntryPath.endswith(".rpm"):
|
|
| 98 |
- listRPMFiles.add(dirEntryPath) |
|
| 99 |
- elif os.path.isdir(dirEntryPath): |
|
| 100 |
- listDirectorys.add(dirEntryPath) |
|
| 101 | 87 |
pkgUtils = PackageUtils(self.logName, self.logPath) |
| 102 |
- for rpmfile in listRPMFiles: |
|
| 103 |
- package, version, release = pkgUtils.findPackageInfoFromRPMFile(rpmfile) |
|
| 104 |
- if package in mapPackageVersion: |
|
| 105 |
- mapPackageVersion[package].append(version) |
|
| 106 |
- mapPackageRelease[package].append(release) |
|
| 107 |
- else: |
|
| 108 |
- mapPackageVersion[package]=[version] |
|
| 109 |
- mapPackageRelease[package]=[release] |
|
| 110 |
- for package in mapPackageVersion: |
|
| 111 |
- if SPECS.getData().isRPMPackage(package): |
|
| 112 |
- numVersions=SPECS.getData().getNumberOfVersions(package) |
|
| 113 |
- flag=True; |
|
| 114 |
- for index in range(0, numVersions): |
|
| 115 |
- specVersion=SPECS.getData().getVersion(package,index) |
|
| 116 |
- specRelease=SPECS.getData().getRelease(package,index) |
|
| 117 |
- if specVersion not in mapPackageVersion[package] and specRelease not in mapPackageRelease[package]: |
|
| 118 |
- flag=False |
|
| 119 |
- if flag: |
|
| 120 |
- listFoundRPMPackages.add(package) |
|
| 121 |
- #Mark package available only if all sub packages are available |
|
| 122 |
- for package in listFoundRPMPackages: |
|
| 123 |
- basePkg = SPECS.getData().getSpecName(package) |
|
| 124 |
- if basePkg in listAvailablePackages: |
|
| 125 |
- continue |
|
| 126 |
- listRPMPackages = SPECS.getData().getRPMPackages(basePkg) |
|
| 127 |
- packageIsAlreadyBuilt = True |
|
| 128 |
- for rpmpkg in listRPMPackages: |
|
| 129 |
- if rpmpkg not in listFoundRPMPackages: |
|
| 130 |
- packageIsAlreadyBuilt = False |
|
| 131 |
- if packageIsAlreadyBuilt: |
|
| 132 |
- listAvailablePackages.add(package) |
|
| 88 |
+ listPackages = SPECS.getData().getListPackages() |
|
| 89 |
+ for package in listPackages: |
|
| 90 |
+ for version in SPECS.getData().getVersions(package): |
|
| 91 |
+ # Mark package available only if all subpackages are available |
|
| 92 |
+ packageIsAlreadyBuilt=True |
|
| 93 |
+ listRPMPackages = SPECS.getData().getRPMPackages(package, version) |
|
| 94 |
+ for rpmPkg in listRPMPackages: |
|
| 95 |
+ if pkgUtils.findRPMFileForGivenPackage(rpmPkg) is None: |
|
| 96 |
+ packageIsAlreadyBuilt=False |
|
| 97 |
+ break; |
|
| 98 |
+ if packageIsAlreadyBuilt: |
|
| 99 |
+ listAvailablePackages.add(package+"-"+version) |
|
| 100 |
+ |
|
| 133 | 101 |
self.logger.info("List of Already built packages")
|
| 134 | 102 |
self.logger.info(listAvailablePackages) |
| 135 | 103 |
return listAvailablePackages |
| ... | ... |
@@ -139,14 +108,15 @@ class PackageManager(object): |
| 139 | 139 |
self.mapPackageToCycle.clear() |
| 140 | 140 |
self.sortedPackageList = [] |
| 141 | 141 |
|
| 142 |
- self.listOfPackagesAlreadyBuilt = self._readAlreadyAvailablePackages() |
|
| 142 |
+ self.listOfPackagesAlreadyBuilt = list(self._readAlreadyAvailablePackages()) |
|
| 143 | 143 |
|
| 144 | 144 |
updateBuiltRPMSList = False |
| 145 | 145 |
while not updateBuiltRPMSList: |
| 146 | 146 |
updateBuiltRPMSList = True |
| 147 |
- listOfPackagesAlreadyBuilt = list(self.listOfPackagesAlreadyBuilt) |
|
| 147 |
+ listOfPackagesAlreadyBuilt = self.listOfPackagesAlreadyBuilt |
|
| 148 | 148 |
for pkg in listOfPackagesAlreadyBuilt: |
| 149 |
- listDependentRpmPackages = SPECS.getData().getRequiresAllForPackage(pkg) |
|
| 149 |
+ packageName, packageVersion = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 150 |
+ listDependentRpmPackages = SPECS.getData().getRequiresAllForPackage(packageName, packageVersion) |
|
| 150 | 151 |
needToRebuild = False |
| 151 | 152 |
for dependentPkg in listDependentRpmPackages: |
| 152 | 153 |
if dependentPkg not in self.listOfPackagesAlreadyBuilt: |
| ... | ... |
@@ -178,17 +148,26 @@ class PackageManager(object): |
| 178 | 178 |
|
| 179 | 179 |
def _initializeScheduler(self, statusEvent): |
| 180 | 180 |
Scheduler.setLog(self.logName, self.logPath) |
| 181 |
- Scheduler.setParams(self.sortedPackageList, self.listOfPackagesAlreadyBuilt) |
|
| 181 |
+ Scheduler.setParams(self.sortedPackageList, set(self.listOfPackagesAlreadyBuilt)) |
|
| 182 | 182 |
Scheduler.setEvent(statusEvent) |
| 183 | 183 |
Scheduler.stopScheduling = False |
| 184 | 184 |
|
| 185 | 185 |
def _buildGivenPackages(self, listPackages, buildThreads): |
| 186 |
+ # Extend listPackages from ["name1", "name2",..] to ["name1-vers1", "name2-vers2",..] |
|
| 187 |
+ listPackageNamesAndVersions=[] |
|
| 188 |
+ for pkg in listPackages: |
|
| 189 |
+ for version in SPECS.getData().getVersions(pkg): |
|
| 190 |
+ listPackageNamesAndVersions.append(pkg+"-"+version) |
|
| 191 |
+ |
|
| 186 | 192 |
if constants.rpmCheck: |
| 193 |
+ listMakeCheckPackages=set() |
|
| 194 |
+ for pkg in listPackages: |
|
| 195 |
+ version = SPECS.getData().getHighestVersion(pkg) |
|
| 196 |
+ listMakeCheckPackages.add(pkg+"-"+version) |
|
| 187 | 197 |
alreadyBuiltRPMS = self._readAlreadyAvailablePackages() |
| 188 |
- listPackages = (list(set(listPackages)|(set(constants.listMakeCheckRPMPkgtoInstall)- |
|
| 189 |
- alreadyBuiltRPMS))) |
|
| 198 |
+ listPackageNamesAndVersions = (list(set(listPackageNamesAndVersions)|(listMakeCheckPackages-alreadyBuiltRPMS))) |
|
| 190 | 199 |
|
| 191 |
- returnVal = self._calculateParams(listPackages) |
|
| 200 |
+ returnVal = self._calculateParams(listPackageNamesAndVersions) |
|
| 192 | 201 |
if not returnVal: |
| 193 | 202 |
self.logger.error("Unable to set paramaters. Terminating the package manager.")
|
| 194 | 203 |
raise Exception("Unable to set paramaters")
|
| ... | ... |
@@ -15,7 +15,7 @@ class PackageUtils(object): |
| 15 | 15 |
|
| 16 | 16 |
def __init__(self, logName=None, logPath=None): |
| 17 | 17 |
if logName is None: |
| 18 |
- self.logName = "PackageUtils" |
|
| 18 |
+ logName = "PackageUtils" |
|
| 19 | 19 |
if logPath is None: |
| 20 | 20 |
logPath = constants.logPath |
| 21 | 21 |
self.logName = logName |
| ... | ... |
@@ -85,12 +85,12 @@ class PackageUtils(object): |
| 85 | 85 |
self.logger.error("Unable to install rpms")
|
| 86 | 86 |
raise Exception("RPM installation failed")
|
| 87 | 87 |
|
| 88 |
- def buildRPMSForGivenPackage(self, package, chrootID, destLogPath=None, index=0): |
|
| 88 |
+ def buildRPMSForGivenPackage(self, package, version, chrootID, destLogPath=None): |
|
| 89 | 89 |
self.logger.info("Building rpm's for package:" + package)
|
| 90 | 90 |
|
| 91 |
- listSourcesFiles = SPECS.getData().getSources(package, index) |
|
| 92 |
- listPatchFiles = SPECS.getData().getPatches(package, index) |
|
| 93 |
- specFile = SPECS.getData().getSpecFile(package, index) |
|
| 91 |
+ listSourcesFiles = SPECS.getData().getSources(package, version) |
|
| 92 |
+ listPatchFiles = SPECS.getData().getPatches(package, version) |
|
| 93 |
+ specFile = SPECS.getData().getSpecFile(package, version) |
|
| 94 | 94 |
specName = SPECS.getData().getSpecName(package) + ".spec" |
| 95 | 95 |
|
| 96 | 96 |
chrootSourcePath = chrootID + constants.topDirPath + "/SOURCES/" |
| ... | ... |
@@ -101,8 +101,8 @@ class PackageUtils(object): |
| 101 | 101 |
|
| 102 | 102 |
# FIXME: some sources are located in SPECS/.. how to mount? |
| 103 | 103 |
# if os.geteuid()==0: |
| 104 |
- self._copySourcesTobuildroot(listSourcesFiles, package, chrootSourcePath, index) |
|
| 105 |
- self._copySourcesTobuildroot(listPatchFiles, package, chrootSourcePath, index) |
|
| 104 |
+ self._copySourcesTobuildroot(listSourcesFiles, package, version, chrootSourcePath) |
|
| 105 |
+ self._copySourcesTobuildroot(listPatchFiles, package, version, chrootSourcePath) |
|
| 106 | 106 |
macros = [] |
| 107 | 107 |
|
| 108 | 108 |
listAdditionalFiles, macros = self._getAdditionalBuildFiles(package) |
| ... | ... |
@@ -144,24 +144,19 @@ class PackageUtils(object): |
| 144 | 144 |
for srpmFile in listSRPMFiles: |
| 145 | 145 |
srpmDestFile = self._copyRPM(chrootID + "/" + srpmFile, constants.sourceRpmPath) |
| 146 | 146 |
|
| 147 |
- def findRPMFileForGivenPackage(self, package,version="*", index=0): |
|
| 147 |
+ def findRPMFileForGivenPackage(self, package,version="*"): |
|
| 148 | 148 |
cmdUtils = CommandUtils() |
| 149 |
- release = "*" |
|
| 150 | 149 |
if version == "*": |
| 151 |
- version = SPECS.getData().getVersion(package, index) |
|
| 152 |
- release = SPECS.getData().getRelease(package, index) |
|
| 150 |
+ version = SPECS.getData().getHighestVersion(package) |
|
| 151 |
+ release = SPECS.getData().getRelease(package, version) |
|
| 152 |
+ buildarch=SPECS.getData().getBuildArch(package, version) |
|
| 153 | 153 |
listFoundRPMFiles = sum([cmdUtils.findFile(package + "-" + version + "-" + release + "." + |
| 154 |
- platform.machine()+".rpm", |
|
| 155 |
- constants.rpmPath), |
|
| 156 |
- cmdUtils.findFile(package + "-" + version + "-" + release + |
|
| 157 |
- ".noarch.rpm", |
|
| 154 |
+ buildarch+".rpm", |
|
| 158 | 155 |
constants.rpmPath)], []) |
| 159 | 156 |
if constants.inputRPMSPath is not None: |
| 160 | 157 |
listFoundRPMFiles = sum([cmdUtils.findFile(package + "-" + version + "-" + release + |
| 161 |
- "." + platform.machine()+".rpm", |
|
| 162 |
- constants.inputRPMSPath), |
|
| 163 |
- cmdUtils.findFile(package + "-" + version + "-" + release + |
|
| 164 |
- ".noarch.rpm", constants.inputRPMSPath)], |
|
| 158 |
+ "." + buildarch+".rpm", |
|
| 159 |
+ constants.inputRPMSPath)], |
|
| 165 | 160 |
listFoundRPMFiles) |
| 166 | 161 |
if len(listFoundRPMFiles) == 1: |
| 167 | 162 |
return listFoundRPMFiles[0] |
| ... | ... |
@@ -169,26 +164,10 @@ class PackageUtils(object): |
| 169 | 169 |
return None |
| 170 | 170 |
if len(listFoundRPMFiles) > 1: |
| 171 | 171 |
self.logger.error("Found multiple rpm files for given package in rpm directory." +
|
| 172 |
- "Unable to determine the rpm file for package:" + package) |
|
| 172 |
+ "Unable to determine the rpm file for package:" + package + |
|
| 173 |
+ " : " + str(listFoundRPMFiles)) |
|
| 173 | 174 |
raise Exception("Multiple rpm files found")
|
| 174 | 175 |
|
| 175 |
- def findPackageInfoFromRPMFile(self, rpmfile): |
|
| 176 |
- rpmfile = os.path.basename(rpmfile) |
|
| 177 |
- rpmfile = rpmfile.replace("." + platform.machine() + ".rpm", "")
|
|
| 178 |
- rpmfile = rpmfile.replace(".noarch.rpm", "")
|
|
| 179 |
- releaseindex = rpmfile.rfind("-")
|
|
| 180 |
- if releaseindex == -1: |
|
| 181 |
- self.logger.error("Invalid rpm file:" + rpmfile)
|
|
| 182 |
- raise Exception("Invalid RPM")
|
|
| 183 |
- versionindex = rpmfile[0:releaseindex].rfind("-")
|
|
| 184 |
- if versionindex == -1: |
|
| 185 |
- self.logger.error("Invalid rpm file:" + rpmfile)
|
|
| 186 |
- raise Exception("Invalid RPM")
|
|
| 187 |
- packageName = rpmfile[0:versionindex] |
|
| 188 |
- version = rpmfile[versionindex + 1:releaseindex] |
|
| 189 |
- release = rpmfile[releaseindex + 1:] |
|
| 190 |
- return packageName, version, release |
|
| 191 |
- |
|
| 192 | 176 |
def findInstalledRPMPackages(self, chrootID): |
| 193 | 177 |
cmd = self.rpmBinary + " " + self.queryRpmPackageOptions |
| 194 | 178 |
chrootCmd = self.runInChrootCommand + " " + chrootID |
| ... | ... |
@@ -198,8 +177,8 @@ class PackageUtils(object): |
| 198 | 198 |
return result.decode().split() |
| 199 | 199 |
return result |
| 200 | 200 |
|
| 201 |
- def adjustGCCSpecs(self, package, chrootID, logPath, index=0): |
|
| 202 |
- opt = " " + SPECS.getData().getSecurityHardeningOption(package, index) |
|
| 201 |
+ def adjustGCCSpecs(self, package, version, chrootID, logPath): |
|
| 202 |
+ opt = " " + SPECS.getData().getSecurityHardeningOption(package, version) |
|
| 203 | 203 |
cmdUtils = CommandUtils() |
| 204 | 204 |
cpcmd = ("cp " + self.adjustGCCSpecScript + " " + chrootID +
|
| 205 | 205 |
"/tmp/" + self.adjustGCCSpecScript) |
| ... | ... |
@@ -316,8 +295,8 @@ class PackageUtils(object): |
| 316 | 316 |
return result.decode().split() |
| 317 | 317 |
return result |
| 318 | 318 |
|
| 319 |
- def adjustGCCSpecsInContainer(self, package, containerID, logPath, index=0): |
|
| 320 |
- opt = " " + SPECS.getData().getSecurityHardeningOption(package, index) |
|
| 319 |
+ def adjustGCCSpecsInContainer(self, package, version, containerID, logPath): |
|
| 320 |
+ opt = " " + SPECS.getData().getSecurityHardeningOption(package, version) |
|
| 321 | 321 |
adjustCmd = "/" + self.adjustGCCSpecScript + opt |
| 322 | 322 |
adjustCmd = "/bin/bash -l -c '" + adjustCmd + "'" |
| 323 | 323 |
logFile = logPath + "/adjustGCCSpecScript.log" |
| ... | ... |
@@ -335,13 +314,13 @@ class PackageUtils(object): |
| 335 | 335 |
self.logger.error("Failed while adjusting gcc specs")
|
| 336 | 336 |
raise Exception("Failed while adjusting gcc specs")
|
| 337 | 337 |
|
| 338 |
- def buildRPMSForGivenPackageInContainer(self, package, containerID, destLogPath=None, index=0): |
|
| 338 |
+ def buildRPMSForGivenPackageInContainer(self, package, version, containerID, destLogPath=None): |
|
| 339 | 339 |
self.logger.info("Building rpm's for package " + package + " in container " +
|
| 340 | 340 |
containerID.short_id) |
| 341 | 341 |
|
| 342 |
- listSourcesFiles = SPECS.getData().getSources(package, index) |
|
| 343 |
- listPatchFiles = SPECS.getData().getPatches(package, index) |
|
| 344 |
- specFile = SPECS.getData().getSpecFile(package, index) |
|
| 342 |
+ listSourcesFiles = SPECS.getData().getSources(package, version) |
|
| 343 |
+ listPatchFiles = SPECS.getData().getPatches(package, version) |
|
| 344 |
+ specFile = SPECS.getData().getSpecFile(package, version) |
|
| 345 | 345 |
specName = SPECS.getData().getSpecName(package) + ".spec" |
| 346 | 346 |
sourcePath = constants.topDirPath + "/SOURCES/" |
| 347 | 347 |
specPath = constants.topDirPath + "/SPECS/" |
| ... | ... |
@@ -361,9 +340,9 @@ class PackageUtils(object): |
| 361 | 361 |
# if os.geteuid()==0: |
| 362 | 362 |
#TODO: mount it in, don't copy |
| 363 | 363 |
macros = [] |
| 364 |
- self._copySourcesToContainer(listSourcesFiles, package, containerID, sourcePath, index) |
|
| 364 |
+ self._copySourcesToContainer(listSourcesFiles, package, version, containerID, sourcePath) |
|
| 365 | 365 |
#TODO: mount it in, don't copy |
| 366 |
- self._copySourcesToContainer(listPatchFiles, package, containerID, sourcePath, index) |
|
| 366 |
+ self._copySourcesToContainer(listPatchFiles, package, version, containerID, sourcePath) |
|
| 367 | 367 |
listAdditionalFiles, macros = self._getAdditionalBuildFiles(package) |
| 368 | 368 |
self._copyAdditionalBuildFilesToContainer(listAdditionalFiles, containerID) |
| 369 | 369 |
|
| ... | ... |
@@ -382,6 +361,7 @@ class PackageUtils(object): |
| 382 | 382 |
destLogFile, |
| 383 | 383 |
containerID, |
| 384 | 384 |
package, |
| 385 |
+ version, |
|
| 385 | 386 |
macros) |
| 386 | 387 |
self.logger.info("Successfully built rpm:" + package)
|
| 387 | 388 |
except Exception as e: |
| ... | ... |
@@ -392,7 +372,7 @@ class PackageUtils(object): |
| 392 | 392 |
rpmLog = destLogPath + "/" + package + ".log" |
| 393 | 393 |
if (constants.rpmCheck and |
| 394 | 394 |
package in constants.testForceRPMS and |
| 395 |
- SPECS.getData().isCheckAvailable(package, index)): |
|
| 395 |
+ SPECS.getData().isCheckAvailable(package, version)): |
|
| 396 | 396 |
cmd = "sed -i '/^Executing(%check):/,/^Processing files:/{//!b};d' " + rpmLog
|
| 397 | 397 |
logFile = destLogPath + "/adjustTestFile.log" |
| 398 | 398 |
returnVal = CommandUtils().runCommandInShell(cmd, logFile) |
| ... | ... |
@@ -435,19 +415,19 @@ class PackageUtils(object): |
| 435 | 435 |
def _getProperVersion(self,package,parseSpecObj): |
| 436 | 436 |
listOfVersionObjs=SPECS.getData().getSpecObj(package) |
| 437 | 437 |
for num in listOfVersionObjs: |
| 438 |
- if parseSpecObj.compare == 'gte': |
|
| 438 |
+ if parseSpecObj.compare == ">=": |
|
| 439 | 439 |
if LooseVersion(num.version) >= LooseVersion(parseSpecObj.version): |
| 440 | 440 |
return num.version |
| 441 |
- elif parseSpecObj.compare == 'lte': |
|
| 441 |
+ elif parseSpecObj.compare == "<=": |
|
| 442 | 442 |
if LooseVersion(num.version) <= LooseVersion(parseSpecObj.version): |
| 443 | 443 |
return num.version |
| 444 |
- elif parseSpecObj.compare == 'eq': |
|
| 444 |
+ elif parseSpecObj.compare == "=": |
|
| 445 | 445 |
if LooseVersion(num.version) == LooseVersion(parseSpecObj.version): |
| 446 | 446 |
return num.version |
| 447 |
- elif parseSpecObj.compare == 'lt': |
|
| 447 |
+ elif parseSpecObj.compare == "<": |
|
| 448 | 448 |
if LooseVersion(num.version) < LooseVersion(parseSpecObj.version): |
| 449 | 449 |
return num.version |
| 450 |
- elif parseSpecObj.compare == 'gt': |
|
| 450 |
+ elif parseSpecObj.compare == ">": |
|
| 451 | 451 |
if LooseVersion(num.version) > LooseVersion(parseSpecObj.version): |
| 452 | 452 |
return num.version |
| 453 | 453 |
return "*" |
| ... | ... |
@@ -468,10 +448,10 @@ class PackageUtils(object): |
| 468 | 468 |
shutil.move(rpmDestPathTemp, rpmDestPath) |
| 469 | 469 |
return rpmDestPath |
| 470 | 470 |
|
| 471 |
- def _verifyShaAndGetSourcePath(self, source, package, index=0): |
|
| 471 |
+ def _verifyShaAndGetSourcePath(self, source, package, version): |
|
| 472 | 472 |
cmdUtils = CommandUtils() |
| 473 | 473 |
# Fetch/verify sources if sha1 not None. |
| 474 |
- sha1 = SPECS.getData().getSHA1(package, source, index) |
|
| 474 |
+ sha1 = SPECS.getData().getSHA1(package, version, source) |
|
| 475 | 475 |
if sha1 is not None: |
| 476 | 476 |
PullSources.get(package, source, sha1, constants.sourcePath, |
| 477 | 477 |
constants.pullsourcesConfig, self.logger) |
| ... | ... |
@@ -497,9 +477,9 @@ class PackageUtils(object): |
| 497 | 497 |
raise Exception("Multiple sources found")
|
| 498 | 498 |
return sourcePath |
| 499 | 499 |
|
| 500 |
- def _copySourcesTobuildroot(self, listSourceFiles, package, destDir, index=0): |
|
| 500 |
+ def _copySourcesTobuildroot(self, listSourceFiles, package, version, destDir): |
|
| 501 | 501 |
for source in listSourceFiles: |
| 502 |
- sourcePath = self._verifyShaAndGetSourcePath(source, package, index) |
|
| 502 |
+ sourcePath = self._verifyShaAndGetSourcePath(source, package, version) |
|
| 503 | 503 |
self.logger.info("Copying... Source path :" + source +
|
| 504 | 504 |
" Source filename: " + sourcePath[0]) |
| 505 | 505 |
shutil.copy2(sourcePath[0], destDir) |
| ... | ... |
@@ -594,10 +574,10 @@ class PackageUtils(object): |
| 594 | 594 |
return listRPMFiles, listSRPMFiles |
| 595 | 595 |
|
| 596 | 596 |
|
| 597 |
- def _copySourcesToContainer(self, listSourceFiles, package, containerID, destDir, index=0): |
|
| 597 |
+ def _copySourcesToContainer(self, listSourceFiles, package, version, containerID, destDir): |
|
| 598 | 598 |
cmdUtils = CommandUtils() |
| 599 | 599 |
for source in listSourceFiles: |
| 600 |
- sourcePath = self._verifyShaAndGetSourcePath(source, package, index) |
|
| 600 |
+ sourcePath = self._verifyShaAndGetSourcePath(source, package, version) |
|
| 601 | 601 |
self.logger.info("Copying source file: " + sourcePath[0])
|
| 602 | 602 |
copyCmd = "docker cp " + sourcePath[0] + " " + containerID.short_id + ":" + destDir |
| 603 | 603 |
cmdUtils.runCommandInShell(copyCmd) |
| ... | ... |
@@ -641,13 +621,13 @@ class PackageUtils(object): |
| 641 | 641 |
return rpmPath |
| 642 | 642 |
|
| 643 | 643 |
|
| 644 |
- def _buildRPMinContainer(self, specFile, rpmLogFile, destLogFile, containerID, package, macros): |
|
| 644 |
+ def _buildRPMinContainer(self, specFile, rpmLogFile, destLogFile, containerID, package, version, macros): |
|
| 645 | 645 |
|
| 646 | 646 |
rpmBuildCmd = self.rpmbuildBinary + " " + self.rpmbuildBuildallOption |
| 647 | 647 |
|
| 648 | 648 |
if constants.rpmCheck and package in constants.testForceRPMS: |
| 649 | 649 |
self.logger.info("#" * (68 + 2 * len(package)))
|
| 650 |
- if not SPECS.getData().isCheckAvailable(package, index): |
|
| 650 |
+ if not SPECS.getData().isCheckAvailable(package, version): |
|
| 651 | 651 |
self.logger.info("####### " + package +
|
| 652 | 652 |
" MakeCheck is not available. Skipping MakeCheck TEST for " + |
| 653 | 653 |
package + " #######") |
| ... | ... |
@@ -679,7 +659,7 @@ class PackageUtils(object): |
| 679 | 679 |
raise Exception("RPM Build failed")
|
| 680 | 680 |
|
| 681 | 681 |
if constants.rpmCheck and package in constants.testForceRPMS: |
| 682 |
- if not SPECS.getData().isCheckAvailable(package, index): |
|
| 682 |
+ if not SPECS.getData().isCheckAvailable(package, version): |
|
| 683 | 683 |
constants.testLogger.info(package + " : N/A") |
| 684 | 684 |
elif returnVal: |
| 685 | 685 |
constants.testLogger.info(package + " : PASS") |
| ... | ... |
@@ -71,7 +71,6 @@ class Scheduler(object): |
| 71 | 71 |
|
| 72 | 72 |
@staticmethod |
| 73 | 73 |
def getNextPackageToBuild(): |
| 74 |
- Scheduler.logger.info("Waiting to acquire scheduler lock")
|
|
| 75 | 74 |
with Scheduler.lock: |
| 76 | 75 |
if Scheduler.stopScheduling: |
| 77 | 76 |
return None |
| ... | ... |
@@ -89,7 +88,6 @@ class Scheduler(object): |
| 89 | 89 |
packageTup = Scheduler.listOfPackagesNextToBuild.get() |
| 90 | 90 |
|
| 91 | 91 |
package = packageTup[1] |
| 92 |
- Scheduler.logger.info("PackagesNextToBuild " + str(packageTup))
|
|
| 93 | 92 |
if Scheduler.listOfPackagesNextToBuild.qsize() > 0: |
| 94 | 93 |
ThreadPool.activateWorkerThreads( |
| 95 | 94 |
Scheduler.listOfPackagesNextToBuild.qsize()) |
| ... | ... |
@@ -98,14 +96,14 @@ class Scheduler(object): |
| 98 | 98 |
return package |
| 99 | 99 |
|
| 100 | 100 |
@staticmethod |
| 101 |
- def _getBuildRequiredPackages(package): |
|
| 101 |
+ def _getBuildRequiredPackages(pkg): |
|
| 102 | 102 |
listRequiredRPMPackages = [] |
| 103 |
- listRequiredRPMPackages.extend(SPECS.getData().getBuildRequiresForPackage(package)) |
|
| 103 |
+ listRequiredRPMPackages.extend(SPECS.getData().getBuildRequiresForPkg(pkg)) |
|
| 104 | 104 |
|
| 105 | 105 |
listRequiredPackages = [] |
| 106 | 106 |
|
| 107 |
- for pkg in listRequiredRPMPackages: |
|
| 108 |
- basePkg = SPECS.getData().getSpecName(pkg.package) |
|
| 107 |
+ for reqPkg in listRequiredRPMPackages: |
|
| 108 |
+ basePkg = SPECS.getData().getBasePkg(reqPkg) |
|
| 109 | 109 |
if basePkg not in listRequiredPackages: |
| 110 | 110 |
listRequiredPackages.append(basePkg) |
| 111 | 111 |
|
| ... | ... |
@@ -208,15 +206,15 @@ class Scheduler(object): |
| 208 | 208 |
|
| 209 | 209 |
|
| 210 | 210 |
@staticmethod |
| 211 |
- def _getRequiredPackages(package): |
|
| 211 |
+ def _getRequiredPackages(pkg): |
|
| 212 | 212 |
listRequiredRPMPackages = [] |
| 213 |
- listRequiredRPMPackages.extend(SPECS.getData().getBuildRequiresForPackage(package)) |
|
| 214 |
- listRequiredRPMPackages.extend(SPECS.getData().getRequiresAllForPackage(package)) |
|
| 213 |
+ listRequiredRPMPackages.extend(SPECS.getData().getBuildRequiresForPkg(pkg)) |
|
| 214 |
+ listRequiredRPMPackages.extend(SPECS.getData().getRequiresAllForPkg(pkg)) |
|
| 215 | 215 |
|
| 216 | 216 |
listRequiredPackages = [] |
| 217 | 217 |
|
| 218 |
- for pkg in listRequiredRPMPackages: |
|
| 219 |
- basePkg = SPECS.getData().getSpecName(pkg.package) |
|
| 218 |
+ for reqPkg in listRequiredRPMPackages: |
|
| 219 |
+ basePkg = SPECS.getData().getBasePkg(reqPkg) |
|
| 220 | 220 |
if basePkg not in listRequiredPackages: |
| 221 | 221 |
listRequiredPackages.append(basePkg) |
| 222 | 222 |
|
| ... | ... |
@@ -224,7 +222,6 @@ class Scheduler(object): |
| 224 | 224 |
|
| 225 | 225 |
@staticmethod |
| 226 | 226 |
def _getListNextPackagesReadyToBuild(): |
| 227 |
- Scheduler.logger.info("Checking for next possible packages to build")
|
|
| 228 | 227 |
for pkg in Scheduler.listOfPackagesToBuild: |
| 229 | 228 |
if pkg in Scheduler.listOfPackagesCurrentlyBuilding: |
| 230 | 229 |
continue |
| ... | ... |
@@ -236,4 +233,4 @@ class Scheduler(object): |
| 236 | 236 |
break |
| 237 | 237 |
if canBuild: |
| 238 | 238 |
Scheduler.listOfPackagesNextToBuild.put((-Scheduler._getPriority(pkg), pkg)) |
| 239 |
- Scheduler.logger.info("Adding " + pkg + " to the schedule list")
|
|
| 239 |
+# Scheduler.logger.info("Adding " + pkg + " to the schedule list")
|
| ... | ... |
@@ -7,7 +7,8 @@ from distutils.version import StrictVersion |
| 7 | 7 |
from SpecUtils import Specutils |
| 8 | 8 |
from Logger import Logger |
| 9 | 9 |
from constants import constants |
| 10 |
- |
|
| 10 |
+from StringUtils import StringUtils |
|
| 11 |
+from distutils.version import LooseVersion |
|
| 11 | 12 |
|
| 12 | 13 |
|
| 13 | 14 |
class SpecObject(object): |
| ... | ... |
@@ -17,6 +18,7 @@ class SpecObject(object): |
| 17 | 17 |
self.name = "" |
| 18 | 18 |
self.version = "" |
| 19 | 19 |
self.release = "" |
| 20 |
+ self.buildarch = {}
|
|
| 20 | 21 |
self.buildRequirePackages = [] |
| 21 | 22 |
self.checkBuildRequirePackages = [] |
| 22 | 23 |
self.installRequiresAllPackages = [] |
| ... | ... |
@@ -65,6 +67,8 @@ class SpecObjectsUtils(object): |
| 65 | 65 |
specObj.sourceurl = spec.getSourceURL() |
| 66 | 66 |
for specPkg in specObj.listPackages: |
| 67 | 67 |
specObj.installRequiresPackages[specPkg] = spec.getRequires(specPkg) |
| 68 |
+ specObj.buildarch[specPkg] = spec.getBuildArch(specPkg) |
|
| 69 |
+ # TODO add multiversioning support |
|
| 68 | 70 |
self.mapPackageToSpec[specPkg] = specName |
| 69 | 71 |
if spec.getIsRPMPackage(specPkg): |
| 70 | 72 |
specObj.listRPMPackages.append(specPkg) |
| ... | ... |
@@ -89,23 +93,100 @@ class SpecObjectsUtils(object): |
| 89 | 89 |
elif os.path.isdir(dirEntryPath): |
| 90 | 90 |
self.getListSpecFiles(listSpecFiles, dirEntryPath) |
| 91 | 91 |
|
| 92 |
- def getBuildRequiresForPackage(self, package, index=0): |
|
| 93 |
- specName = self.getSpecName(package) |
|
| 94 |
- return self.mapSpecObjects[specName][index].buildRequirePackages |
|
| 95 |
- |
|
| 96 |
- def getRequiresAllForPackage(self, package, index=0): |
|
| 92 |
+ def _getProperVersion(self,depPkg): |
|
| 93 |
+ if (depPkg.compare == ""): |
|
| 94 |
+ return self.getHighestVersion(depPkg.package) |
|
| 95 |
+ specObjs=self.getSpecObj(depPkg.package) |
|
| 96 |
+ for obj in specObjs: |
|
| 97 |
+ verrel=obj.version+"-"+obj.release |
|
| 98 |
+ if depPkg.compare == ">=": |
|
| 99 |
+ if LooseVersion(verrel) >= LooseVersion(depPkg.version): |
|
| 100 |
+ return obj.version |
|
| 101 |
+ elif depPkg.compare == "<=": |
|
| 102 |
+ if LooseVersion(verrel) <= LooseVersion(depPkg.version): |
|
| 103 |
+ return obj.version |
|
| 104 |
+ elif depPkg.compare == "=": |
|
| 105 |
+ if LooseVersion(verrel) == LooseVersion(depPkg.version): |
|
| 106 |
+ return obj.version |
|
| 107 |
+ if LooseVersion(obj.version) == LooseVersion(depPkg.version): |
|
| 108 |
+ return obj.version |
|
| 109 |
+ elif depPkg.compare == "<": |
|
| 110 |
+ if LooseVersion(verrel) < LooseVersion(depPkg.version): |
|
| 111 |
+ return obj.version |
|
| 112 |
+ elif depPkg.compare == ">": |
|
| 113 |
+ if LooseVersion(verrel) > LooseVersion(depPkg.version): |
|
| 114 |
+ return obj.version |
|
| 115 |
+ |
|
| 116 |
+ # about to throw exception |
|
| 117 |
+ availableVersions="" |
|
| 118 |
+ for obj in specObjs: |
|
| 119 |
+ availableVersions+=" "+obj.name+"-"+obj.version+"-"+obj.release |
|
| 120 |
+ raise Exception("Can not find package: " + depPkg.package + depPkg.compare + depPkg.version + " available specs:"+availableVersions)
|
|
| 121 |
+ |
|
| 122 |
+ def _getSpecObjField(self, package, version, field): |
|
| 97 | 123 |
specName = self.getSpecName(package) |
| 98 |
- return self.mapSpecObjects[specName][index].installRequiresAllPackages |
|
| 99 |
- |
|
| 100 |
- def getRequiresForPackage(self, package, index=0): |
|
| 101 |
- specName = self.getSpecName(package) |
|
| 102 |
- if package in self.mapSpecObjects[specName][index].installRequiresPackages: |
|
| 103 |
- return self.mapSpecObjects[specName][index].installRequiresPackages[package] |
|
| 104 |
- return None |
|
| 105 |
- |
|
| 106 |
- def getCheckBuildRequiresForPackage(self, package, index=0): |
|
| 124 |
+ for specObj in self.mapSpecObjects[specName]: |
|
| 125 |
+ if specObj.version == version: |
|
| 126 |
+ return field(specObj) |
|
| 127 |
+ self.logger.error("Could not able to find " + package +
|
|
| 128 |
+ "-" + version + " package from specs") |
|
| 129 |
+ raise Exception("Invalid package: " + package + "-" + version)
|
|
| 130 |
+ |
|
| 131 |
+ def getBuildRequiresForPackage(self, package, version): |
|
| 132 |
+ buildRequiresList=[] |
|
| 133 |
+ buildRequiresPackages = self._getSpecObjField(package, version, field=lambda x : x.buildRequirePackages) |
|
| 134 |
+ for pkg in buildRequiresPackages: |
|
| 135 |
+ properVersion = self._getProperVersion(pkg) |
|
| 136 |
+ buildRequiresList.append(pkg.package+"-"+properVersion) |
|
| 137 |
+ return buildRequiresList |
|
| 138 |
+ |
|
| 139 |
+ def getBuildRequiresForPkg(self, pkg): |
|
| 140 |
+ package, version = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 141 |
+ return self.getBuildRequiresForPackage(package, version) |
|
| 142 |
+ |
|
| 143 |
+ def getBuildRequiresForPkg(self, pkg): |
|
| 144 |
+ package, version = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 145 |
+ return self.getBuildRequiresForPackage(package, version) |
|
| 146 |
+ |
|
| 147 |
+ # Returns list of [ "pkg1-vers1", "pkg2-vers2",.. ] |
|
| 148 |
+ def getRequiresAllForPackage(self, package, version): |
|
| 149 |
+ requiresList=[] |
|
| 150 |
+ requiresPackages = self._getSpecObjField(package, version, field=lambda x : x.installRequiresAllPackages) |
|
| 151 |
+ for pkg in requiresPackages: |
|
| 152 |
+ properVersion = self._getProperVersion(pkg) |
|
| 153 |
+ requiresList.append(pkg.package+"-"+properVersion) |
|
| 154 |
+ return requiresList |
|
| 155 |
+ |
|
| 156 |
+ def getRequiresAllForPkg(self, pkg): |
|
| 157 |
+ package, version = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 158 |
+ return self.getRequiresAllForPackage(package, version) |
|
| 159 |
+ |
|
| 160 |
+ def getRequiresForPackage(self, package, version): |
|
| 161 |
+ requiresList=[] |
|
| 107 | 162 |
specName = self.getSpecName(package) |
| 108 |
- return self.mapSpecObjects[specName][index].checkBuildRequirePackages |
|
| 163 |
+ for specObj in self.mapSpecObjects[specName]: |
|
| 164 |
+ if specObj.version == version: |
|
| 165 |
+ if package in specObj.installRequiresPackages: |
|
| 166 |
+ requiresPackages = specObj.installRequiresPackages[package] |
|
| 167 |
+ for pkg in requiresPackages: |
|
| 168 |
+ properVersion = self._getProperVersion(pkg) |
|
| 169 |
+ requiresList.append(pkg.package+"-"+properVersion) |
|
| 170 |
+ return requiresList |
|
| 171 |
+ self.logger.error("Could not able to find " + package +
|
|
| 172 |
+ "-" + version + " package from specs") |
|
| 173 |
+ raise Exception("Invalid package: " + package + "-" + version)
|
|
| 174 |
+ |
|
| 175 |
+ def getRequiresForPkg(self, pkg): |
|
| 176 |
+ package, version = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 177 |
+ return self.getRequiresForPackage(package, version) |
|
| 178 |
+ |
|
| 179 |
+ def getCheckBuildRequiresForPackage(self, package, version): |
|
| 180 |
+ checkBuildRequiresList=[] |
|
| 181 |
+ checkBuildRequiresPackages = self._getSpecObjField(package, version, field=lambda x : x.checkBuildRequirePackages) |
|
| 182 |
+ for pkg in checkBuildRequiresPackages: |
|
| 183 |
+ properVersion = self._getProperVersion(pkg) |
|
| 184 |
+ checkBuildRequiresList.append(pkg.package+"-"+properVersion) |
|
| 185 |
+ return checkBuildRequiresList |
|
| 109 | 186 |
|
| 110 | 187 |
def getSpecObj(self, package): |
| 111 | 188 |
specName=self.getSpecName(package) |
| ... | ... |
@@ -113,43 +194,49 @@ class SpecObjectsUtils(object): |
| 113 | 113 |
|
| 114 | 114 |
def getPkgNamesFromObj(self, objlist): |
| 115 | 115 |
listPkgName=[] |
| 116 |
- listPkgNames=list(set(objlist)) |
|
| 117 |
- for name in listPkgNames: |
|
| 116 |
+ for name in objlist: |
|
| 118 | 117 |
listPkgName.append(name.package) |
| 119 |
- listPkgName=list(set(listPkgName)) |
|
| 120 | 118 |
return listPkgName |
| 121 | 119 |
|
| 122 |
- def getRelease(self, package, index=0): |
|
| 123 |
- specName = self.getSpecName(package) |
|
| 124 |
- return self.mapSpecObjects[specName][index].release |
|
| 120 |
+ def getRelease(self, package, version): |
|
| 121 |
+ return self._getSpecObjField(package, version, field=lambda x : x.release) |
|
| 125 | 122 |
|
| 126 |
- def getVersion(self, package, index=0): |
|
| 123 |
+ def getVersions(self, package): |
|
| 124 |
+ versions=[] |
|
| 127 | 125 |
specName = self.getSpecName(package) |
| 128 |
- return self.mapSpecObjects[specName][index].version |
|
| 126 |
+ for specObj in self.mapSpecObjects[specName]: |
|
| 127 |
+ versions.append(specObj.version) |
|
| 128 |
+ return versions |
|
| 129 | 129 |
|
| 130 |
- def getSpecFile(self, package, index=0): |
|
| 130 |
+ def getHighestVersion(self, package): |
|
| 131 | 131 |
specName = self.getSpecName(package) |
| 132 |
- return self.mapSpecObjects[specName][index].specFile |
|
| 132 |
+ return self.mapSpecObjects[specName][0].version |
|
| 133 | 133 |
|
| 134 |
- def getPatches(self, package, index=0): |
|
| 135 |
- specName = self.getSpecName(package) |
|
| 136 |
- return self.mapSpecObjects[specName][index].listPatches |
|
| 134 |
+ def getBuildArch(self, package, version): |
|
| 135 |
+ return self._getSpecObjField(package, version, field=lambda x : x.buildarch[package]) |
|
| 137 | 136 |
|
| 138 |
- def getSources(self, package, index=0): |
|
| 139 |
- specName = self.getSpecName(package) |
|
| 140 |
- return self.mapSpecObjects[specName][index].listSources |
|
| 137 |
+ def getSpecFile(self, package, version): |
|
| 138 |
+ return self._getSpecObjField(package, version, field=lambda x : x.specFile) |
|
| 141 | 139 |
|
| 142 |
- def getSHA1(self, package, source, index=0): |
|
| 143 |
- specName = self.getSpecName(package) |
|
| 144 |
- return self.mapSpecObjects[specName][index].checksums.get(source) |
|
| 140 |
+ def getPatches(self, package, version): |
|
| 141 |
+ return self._getSpecObjField(package, version, field=lambda x : x.listPatches) |
|
| 145 | 142 |
|
| 146 |
- def getPackages(self, package, index=0): |
|
| 147 |
- specName = self.getSpecName(package) |
|
| 148 |
- return self.mapSpecObjects[specName][index].listPackages |
|
| 143 |
+ def getSources(self, package, version): |
|
| 144 |
+ return self._getSpecObjField(package, version, field=lambda x : x.listSources) |
|
| 149 | 145 |
|
| 150 |
- def getRPMPackages(self, package, index=0): |
|
| 151 |
- specName = self.getSpecName(package) |
|
| 152 |
- return self.mapSpecObjects[specName][index].listRPMPackages |
|
| 146 |
+ def getSHA1(self, package, version, source): |
|
| 147 |
+ return self._getSpecObjField(package, version, field=lambda x : x.checksums.get(source)) |
|
| 148 |
+ |
|
| 149 |
+ # returns list of package names (no versions) |
|
| 150 |
+ def getPackages(self, package, version): |
|
| 151 |
+ return self._getSpecObjField(package, version, field=lambda x : x.listPackages) |
|
| 152 |
+ |
|
| 153 |
+ def getPackagesForPkg(self, pkg): |
|
| 154 |
+ package, version = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 155 |
+ return self.getPackages(package, version) |
|
| 156 |
+ |
|
| 157 |
+ def getRPMPackages(self, package, version): |
|
| 158 |
+ return self._getSpecObjField(package, version, field=lambda x : x.listRPMPackages) |
|
| 153 | 159 |
|
| 154 | 160 |
@staticmethod |
| 155 | 161 |
def compareVersions(p): |
| ... | ... |
@@ -170,32 +257,29 @@ class SpecObjectsUtils(object): |
| 170 | 170 |
return True |
| 171 | 171 |
return False |
| 172 | 172 |
|
| 173 |
- def getSecurityHardeningOption(self, package, index=0): |
|
| 174 |
- specName = self.getSpecName(package) |
|
| 175 |
- return self.mapSpecObjects[specName][index].securityHardening |
|
| 173 |
+ def getSecurityHardeningOption(self, package, version): |
|
| 174 |
+ return self._getSpecObjField(package, version, field=lambda x : x.securityHardening) |
|
| 176 | 175 |
|
| 177 |
- def isCheckAvailable(self, package, index=0): |
|
| 178 |
- specName = self.getSpecName(package) |
|
| 179 |
- return self.mapSpecObjects[specName][index].isCheckAvailable |
|
| 176 |
+ def isCheckAvailable(self, package, version): |
|
| 177 |
+ return self._getSpecObjField(package, version, field=lambda x : x.isCheckAvailable) |
|
| 180 | 178 |
|
| 181 | 179 |
def getListPackages(self): |
| 182 | 180 |
return list(self.mapSpecObjects.keys()) |
| 183 | 181 |
|
| 184 |
- def getURL(self, package, index=0): |
|
| 185 |
- specName = self.getSpecName(package) |
|
| 186 |
- return self.mapSpecObjects[specName][index].url |
|
| 182 |
+ def getURL(self, package, version): |
|
| 183 |
+ return self._getSpecObjField(package, version, field=lambda x : x.url) |
|
| 187 | 184 |
|
| 188 |
- def getSourceURL(self, package, index=0): |
|
| 189 |
- specName = self.getSpecName(package) |
|
| 190 |
- return self.mapSpecObjects[specName][index].sourceurl |
|
| 185 |
+ def getSourceURL(self, package, version): |
|
| 186 |
+ return self._getSpecObjField(package, version, field=lambda x : x.sourceurl) |
|
| 191 | 187 |
|
| 192 |
- def getLicense(self, package, index=0): |
|
| 193 |
- specName = self.getSpecName(package) |
|
| 194 |
- return self.mapSpecObjects[specName][index].license |
|
| 188 |
+ def getLicense(self, package, version): |
|
| 189 |
+ return self._getSpecObjField(package, version, field=lambda x : x.license) |
|
| 190 |
+ |
|
| 191 |
+ # Converts "glibc-devel-2.28" into "glibc-2.28" |
|
| 192 |
+ def getBasePkg(self, pkg): |
|
| 193 |
+ package, version = StringUtils.splitPackageNameAndVersion(pkg) |
|
| 194 |
+ return self.getSpecName(package)+"-"+version |
|
| 195 | 195 |
|
| 196 |
- def getNumberOfVersions(self, package): |
|
| 197 |
- specName=self.getSpecName(package) |
|
| 198 |
- return len(self.mapSpecObjects[specName]) |
|
| 199 | 196 |
|
| 200 | 197 |
def printAllObjects(self): |
| 201 | 198 |
listSpecs = self.mapSpecObjects.keys() |
| ... | ... |
@@ -300,10 +384,11 @@ class SpecDependencyGenerator(object): |
| 300 | 300 |
while not depQue.empty(): |
| 301 | 301 |
specPkg = depQue.get() |
| 302 | 302 |
try: |
| 303 |
- listRequiredPackages = SPECS.getData().getRequiresForPackage(specPkg) |
|
| 303 |
+ listRequiredPackages = SPECS.getData().getRequiresForPkg(specPkg) |
|
| 304 | 304 |
except Exception as e: |
| 305 | 305 |
print("Caught Exception:"+str(e))
|
| 306 | 306 |
print(specPkg + " is missing") |
| 307 |
+ raise e |
|
| 307 | 308 |
|
| 308 | 309 |
for depPkg in listRequiredPackages: |
| 309 | 310 |
if depPkg in mapDependencies: |
| ... | ... |
@@ -319,9 +404,9 @@ class SpecDependencyGenerator(object): |
| 319 | 319 |
def findTotalWhoNeedsToBuild(self, depQue, whoNeedsBuild): |
| 320 | 320 |
while not depQue.empty(): |
| 321 | 321 |
specPkg = depQue.get() |
| 322 |
- listPackagesRequiredToBuild = SPECS.getData().getBuildRequiresForPackage(specPkg) |
|
| 322 |
+ listPackagesRequiredToBuild = SPECS.getData().getBuildRequiresForPkg(specPkg) |
|
| 323 | 323 |
for depPkg in listPackagesRequiredToBuild: |
| 324 |
- depSpecPkg = SPECS.getData().getSpecName(depPkg) |
|
| 324 |
+ depSpecPkg = SPECS.getData().getBasePkg(depPkg) |
|
| 325 | 325 |
if depSpecPkg not in whoNeedsBuild: |
| 326 | 326 |
whoNeedsBuild.append(depSpecPkg) |
| 327 | 327 |
depQue.put(depSpecPkg) |
| ... | ... |
@@ -339,9 +424,10 @@ class SpecDependencyGenerator(object): |
| 339 | 339 |
return packages |
| 340 | 340 |
|
| 341 | 341 |
def updateLevels(self, mapDependencies, inPkg, parent, level): |
| 342 |
- listPackages = SPECS.getData().getPackages(inPkg) |
|
| 343 |
- for depPkg in SPECS.getData().getRequiresForPackage(inPkg): |
|
| 344 |
- if depPkg in listPackages: |
|
| 342 |
+ listPackages = SPECS.getData().getPackagesForPkg(inPkg) |
|
| 343 |
+ for depPkg in SPECS.getData().getRequiresForPkg(inPkg): |
|
| 344 |
+ package, version = StringUtils.splitPackageNameAndVersion(depPkg) |
|
| 345 |
+ if package in listPackages: |
|
| 345 | 346 |
continue |
| 346 | 347 |
if depPkg in mapDependencies and mapDependencies[depPkg] < level + 1: |
| 347 | 348 |
mapDependencies[depPkg] = level + 1 |
| ... | ... |
@@ -350,13 +436,15 @@ class SpecDependencyGenerator(object): |
| 350 | 350 |
|
| 351 | 351 |
def calculateSpecDependency(self, inputPackages, mapDependencies, parent): |
| 352 | 352 |
depQue = queue.Queue() |
| 353 |
- for pkg in inputPackages: |
|
| 354 |
- if SPECS.getData().isRPMPackage(pkg): |
|
| 355 |
- if pkg not in mapDependencies: |
|
| 356 |
- mapDependencies[pkg] = 0 |
|
| 357 |
- parent[pkg] = "" |
|
| 358 |
- depQue.put(pkg) |
|
| 359 |
- self.findTotalRequires(mapDependencies, depQue, parent) |
|
| 353 |
+ for package in inputPackages: |
|
| 354 |
+ if SPECS.getData().isRPMPackage(package): |
|
| 355 |
+ for version in SPECS.getData().getVersions(package): |
|
| 356 |
+ pkg = package+"-"+version |
|
| 357 |
+ if pkg not in mapDependencies: |
|
| 358 |
+ mapDependencies[pkg] = 0 |
|
| 359 |
+ parent[pkg] = "" |
|
| 360 |
+ depQue.put(pkg) |
|
| 361 |
+ self.findTotalRequires(mapDependencies, depQue, parent) |
|
| 360 | 362 |
else: |
| 361 | 363 |
print("Could not find spec for "+pkg)
|
| 362 | 364 |
|
| ... | ... |
@@ -414,7 +502,8 @@ class SpecDependencyGenerator(object): |
| 414 | 414 |
return self.displayDependencies(displayOption, inputType, inputValue, mapDependencies, parent) |
| 415 | 415 |
elif inputType == "who-needs": |
| 416 | 416 |
for depPkg in SPECS.getData().mapPackageToSpec: |
| 417 |
- if inputValue in SPECS.getData().getRequiresForPackage(depPkg): |
|
| 417 |
+ pkg=inputValue+"-"+SPECS.getData().getHighestVersion(inputValue) |
|
| 418 |
+ if pkg in SPECS.getData().getRequiresForPkg(depPkg): |
|
| 418 | 419 |
whoNeedsList.append(depPkg) |
| 419 | 420 |
print (whoNeedsList) |
| 420 | 421 |
return whoNeedsList |
| ... | ... |
@@ -314,18 +314,8 @@ class SpecParser(object): |
| 314 | 314 |
else: |
| 315 | 315 |
continue |
| 316 | 316 |
if i + 2 < len(listContents): |
| 317 |
- if listContents[i+1] == ">=": |
|
| 318 |
- compare = "gte" |
|
| 319 |
- elif listContents[i+1] == "<=": |
|
| 320 |
- compare = "lte" |
|
| 321 |
- elif listContents[i+1] == "==": |
|
| 322 |
- compare = "eq" |
|
| 323 |
- elif listContents[i+1] == "<": |
|
| 324 |
- compare = "lt" |
|
| 325 |
- elif listContents[i+1] == ">": |
|
| 326 |
- compare = "gt" |
|
| 327 |
- elif listContents[i+1] == "=": |
|
| 328 |
- compare = "eq" |
|
| 317 |
+ if listContents[i+1] in (">=", "<=", "=", "<", ">"):
|
|
| 318 |
+ compare = listContents[i+1] |
|
| 329 | 319 |
|
| 330 | 320 |
if compare is not None: |
| 331 | 321 |
dpkg.package = packageName |
| ... | ... |
@@ -73,6 +73,13 @@ class Specutils(object): |
| 73 | 73 |
return None |
| 74 | 74 |
return pkg.license |
| 75 | 75 |
|
| 76 |
+ def getBuildArch(self, pkgName): |
|
| 77 |
+ for pkg in self.spec.packages.values(): |
|
| 78 |
+ if pkg.name == pkgName: |
|
| 79 |
+ return pkg.buildarch |
|
| 80 |
+ pkg = self.spec.packages.get('default')
|
|
| 81 |
+ return pkg.buildarch |
|
| 82 |
+ |
|
| 76 | 83 |
def getURL(self): |
| 77 | 84 |
pkg = self.spec.packages.get('default')
|
| 78 | 85 |
if pkg is None: |
| ... | ... |
@@ -131,7 +138,7 @@ class Specutils(object): |
| 131 | 131 |
for pkg in self.spec.packages.values(): |
| 132 | 132 |
if pkg.name == pkgName: |
| 133 | 133 |
for dpkg in pkg.requires: |
| 134 |
- dependentPackages.append(dpkg.package) |
|
| 134 |
+ dependentPackages.append(dpkg) |
|
| 135 | 135 |
return dependentPackages |
| 136 | 136 |
|
| 137 | 137 |
def getProvides(self, packageName): |
| ... | ... |
@@ -39,3 +39,12 @@ class StringUtils(object): |
| 39 | 39 |
return inputstring |
| 40 | 40 |
name = m.group(2) |
| 41 | 41 |
return name.replace("_", ".")
|
| 42 |
+ |
|
| 43 |
+ @staticmethod |
|
| 44 |
+ def splitPackageNameAndVersion(pkg): |
|
| 45 |
+ versionindex = pkg.rfind("-")
|
|
| 46 |
+ if versionindex == -1: |
|
| 47 |
+ raise Exception("Invalid argument")
|
|
| 48 |
+ packageName = pkg[:versionindex] |
|
| 49 |
+ packageVersion = pkg[versionindex+1:] |
|
| 50 |
+ return packageName, packageVersion |
| ... | ... |
@@ -8,6 +8,7 @@ from Logger import Logger |
| 8 | 8 |
from PackageUtils import PackageUtils |
| 9 | 9 |
from constants import constants |
| 10 | 10 |
from SpecData import SPECS |
| 11 |
+from StringUtils import StringUtils |
|
| 11 | 12 |
|
| 12 | 13 |
class ToolChainUtils(object): |
| 13 | 14 |
|
| ... | ... |
@@ -83,7 +84,8 @@ class ToolChainUtils(object): |
| 83 | 83 |
try: |
| 84 | 84 |
pkgUtils = PackageUtils(self.logName, self.logPath) |
| 85 | 85 |
for package in constants.listCoreToolChainPackages: |
| 86 |
- rpmPkg = pkgUtils.findRPMFileForGivenPackage(package) |
|
| 86 |
+ version = SPECS.getData().getHighestVersion(package) |
|
| 87 |
+ rpmPkg = pkgUtils.findRPMFileForGivenPackage(package, version) |
|
| 87 | 88 |
if rpmPkg is not None: |
| 88 | 89 |
continue |
| 89 | 90 |
self.logger.info("Building core toolchain package: " + package)
|
| ... | ... |
@@ -97,9 +99,9 @@ class ToolChainUtils(object): |
| 97 | 97 |
if not returnVal: |
| 98 | 98 |
self.logger.error("Creating chroot failed")
|
| 99 | 99 |
raise Exception("creating chroot failed")
|
| 100 |
- self.installToolChainRPMS(chrootID, package, destLogPath) |
|
| 101 |
- pkgUtils.adjustGCCSpecs(package, chrootID, destLogPath) |
|
| 102 |
- pkgUtils.buildRPMSForGivenPackage(package, chrootID, destLogPath) |
|
| 100 |
+ self.installToolChainRPMS(package, version, chrootID, destLogPath) |
|
| 101 |
+ pkgUtils.adjustGCCSpecs(package, version, chrootID, destLogPath) |
|
| 102 |
+ pkgUtils.buildRPMSForGivenPackage(package, version, chrootID, destLogPath) |
|
| 103 | 103 |
pkgCount += 1 |
| 104 | 104 |
chrUtils.destroyChroot(chrootID) |
| 105 | 105 |
chrootID = None |
| ... | ... |
@@ -113,13 +115,12 @@ class ToolChainUtils(object): |
| 113 | 113 |
raise e |
| 114 | 114 |
return pkgCount |
| 115 | 115 |
|
| 116 |
- def getListDependentPackageLineContent(self, index): |
|
| 117 |
- listBuildRequiresPkgLineContent=SPECS.getData().getBuildRequiresForPackage(self.package, index) |
|
| 118 |
- listBuildRequiresPkgLineContent.extend(SPECS.getData().getCheckBuildRequiresForPackage(self.package, index)) |
|
| 119 |
- listBuildRequiresPkgLineContent=list(set(listBuildRequiresPkgLineContent)) |
|
| 120 |
- return listBuildRequiresPkgLineContent |
|
| 116 |
+ def getListDependentPackages(self, package, version): |
|
| 117 |
+ listBuildRequiresPkg=SPECS.getData().getBuildRequiresForPackage(package, version) |
|
| 118 |
+ listBuildRequiresPkg.extend(SPECS.getData().getCheckBuildRequiresForPackage(package, version)) |
|
| 119 |
+ return listBuildRequiresPkg |
|
| 121 | 120 |
|
| 122 |
- def installToolChainRPMS(self, chrootID, packageName, logPath=None,index=0): |
|
| 121 |
+ def installToolChainRPMS(self, packageName, packageVersion, chrootID, logPath=None): |
|
| 123 | 122 |
if logPath is None: |
| 124 | 123 |
logPath = self.logPath |
| 125 | 124 |
cmdUtils = CommandUtils() |
| ... | ... |
@@ -127,15 +128,15 @@ class ToolChainUtils(object): |
| 127 | 127 |
self.logger.info("Installing Tool Chain RPMS.......")
|
| 128 | 128 |
rpmFiles = "" |
| 129 | 129 |
packages = "" |
| 130 |
- self.package=packageName |
|
| 131 |
- listBuildRequiresPackageLineContent = self.getListDependentPackageLineContent(index) |
|
| 130 |
+ listBuildRequiresPackages = self.getListDependentPackages(packageName, packageVersion) |
|
| 132 | 131 |
for package in constants.listToolChainRPMsToInstall: |
| 133 | 132 |
pkgUtils = PackageUtils(self.logName, self.logPath) |
| 134 | 133 |
rpmFile = None |
| 135 | 134 |
version = "*" |
| 136 |
- for depPkg in listBuildRequiresPackageLineContent: |
|
| 137 |
- if depPkg.package == package: |
|
| 138 |
- version=pkgUtils._getProperVersion(package,depPkg) |
|
| 135 |
+ for depPkg in listBuildRequiresPackages: |
|
| 136 |
+ depPkgName, depPkgVersion = StringUtils.splitPackageNameAndVersion(depPkg) |
|
| 137 |
+ if depPkgName == package: |
|
| 138 |
+ version=depPkgVersion |
|
| 139 | 139 |
if constants.rpmCheck: |
| 140 | 140 |
rpmFile = pkgUtils.findRPMFileForGivenPackage(package, version) |
| 141 | 141 |
else: |
| ... | ... |
@@ -157,9 +158,9 @@ class ToolChainUtils(object): |
| 157 | 157 |
" in current and previous versions") |
| 158 | 158 |
raise Exception("Input Error")
|
| 159 | 159 |
rpmFiles += " " + rpmFile |
| 160 |
- packages += " " + package |
|
| 160 |
+ packages += " " + package+"-"+version |
|
| 161 | 161 |
|
| 162 |
- self.logger.debug("Installing toolchain rpms:" + packages)
|
|
| 162 |
+ self.logger.debug(packages) |
|
| 163 | 163 |
cmd = (self.rpmCommand + " -i -v --nodeps --noorder --force --root " + |
| 164 | 164 |
chrootID +" --define \'_dbpath /var/lib/rpm\' "+ rpmFiles) |
| 165 | 165 |
retVal = cmdUtils.runCommandInShell(cmd, logPath + "/install_toolchain_rpms.log") |
| ... | ... |
@@ -218,7 +219,8 @@ class ToolChainUtils(object): |
| 218 | 218 |
packages = "" |
| 219 | 219 |
pkgUtils = PackageUtils(self.logName, self.logPath) |
| 220 | 220 |
for package in constants.listToolChainRPMPkgsToInstall: |
| 221 |
- rpmFile = pkgUtils.findRPMFileForGivenPackage(package) |
|
| 221 |
+ version = SPECS.getData().getHighestVersion(package) |
|
| 222 |
+ rpmFile = pkgUtils.findRPMFileForGivenPackage(package, version) |
|
| 222 | 223 |
if rpmFile is None: |
| 223 | 224 |
# sqlite-autoconf package was renamed, but it still published as sqlite-autoconf |
| 224 | 225 |
# if (package == "sqlite") and (platform.machine() == "x86_64"): |
| ... | ... |
@@ -23,7 +23,6 @@ class WorkerThread(threading.Thread): |
| 23 | 23 |
pkg = Scheduler.Scheduler.getNextPackageToBuild() |
| 24 | 24 |
if pkg is None: |
| 25 | 25 |
break |
| 26 |
- self.logger.info("Thread " + self.name + " is building package:" + pkg)
|
|
| 27 | 26 |
if self.pkgBuildType == "chroot": |
| 28 | 27 |
pkgBuilder = PackageBuilderChroot(self.mapPackageToCycle, |
| 29 | 28 |
self.pkgBuildType) |
| ... | ... |
@@ -39,7 +38,6 @@ class WorkerThread(threading.Thread): |
| 39 | 39 |
self.logger.info("Thread " + self.name + " stopped building package:" + pkg)
|
| 40 | 40 |
self.statusEvent.set() |
| 41 | 41 |
break |
| 42 |
- self.logger.info("Thread " + self.name + " finished building package:" + pkg)
|
|
| 43 | 42 |
Scheduler.Scheduler.notifyPackageBuildCompleted(pkg) |
| 44 | 43 |
|
| 45 | 44 |
ThreadPool.ThreadPool.makeWorkerThreadInActive(self.name) |