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) |