Change-Id: I00a3af5c53a76f698d16f0e1498abc396f1f18ac
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/1527
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>
... | ... |
@@ -21,6 +21,7 @@ class SerializableSpecObject(object): |
21 | 21 |
self.url="" |
22 | 22 |
self.sourceurl="" |
23 | 23 |
self.license="" |
24 |
+ self.specDefs={} |
|
24 | 25 |
|
25 | 26 |
class SerializableSpecObjectsUtils(object): |
26 | 27 |
|
... | ... |
@@ -47,6 +48,7 @@ class SerializableSpecObjectsUtils(object): |
47 | 47 |
specObj.release=spec.getRelease() |
48 | 48 |
specObj.listSources=spec.getSourceNames() |
49 | 49 |
specObj.checksums=spec.getChecksums() |
50 |
+ specObj.specDefs=spec.getDefinitions() |
|
50 | 51 |
specObj.listPatches=spec.getPatchNames() |
51 | 52 |
specObj.securityHardening=spec.getSecurityHardeningOption() |
52 | 53 |
specObj.isCheckAvailable=spec.isCheckAvailable() |
... | ... |
@@ -97,7 +99,8 @@ class SerializableSpecObjectsUtils(object): |
97 | 97 |
def getRPMMacros(self): |
98 | 98 |
return self.userDefinedMacros |
99 | 99 |
|
100 |
- def processData(self, data): |
|
100 |
+ def processData(self, package, data): |
|
101 |
+ #User macros |
|
101 | 102 |
for macroName in self.userDefinedMacros.keys(): |
102 | 103 |
value = self.userDefinedMacros[macroName] |
103 | 104 |
macro="%{?"+macroName+"}" |
... | ... |
@@ -111,11 +114,27 @@ class SerializableSpecObjectsUtils(object): |
111 | 111 |
macro="%"+macroName |
112 | 112 |
if data.find(macro) != -1: |
113 | 113 |
data = data.replace(macro,value) |
114 |
+ #Spec definitions |
|
115 |
+ specName=self.getSpecName(package) |
|
116 |
+ specDefs = self.mapSerializableSpecObjects[specName].specDefs |
|
117 |
+ for macroName in specDefs.keys(): |
|
118 |
+ value = specDefs[macroName] |
|
119 |
+ macro="%{?"+macroName+"}" |
|
120 |
+ if data.find(macro) != -1: |
|
121 |
+ data = data.replace(macro,value) |
|
122 |
+ continue |
|
123 |
+ macro="%{"+macroName+"}" |
|
124 |
+ if data.find(macro) != -1: |
|
125 |
+ data = data.replace(macro,value) |
|
126 |
+ continue |
|
127 |
+ macro="%"+macroName |
|
128 |
+ if data.find(macro) != -1: |
|
129 |
+ data = data.replace(macro,value) |
|
114 | 130 |
return data |
115 | 131 |
|
116 | 132 |
def getRelease(self, package): |
117 | 133 |
specName=self.getSpecName(package) |
118 |
- return self.processData(self.mapSerializableSpecObjects[specName].release) |
|
134 |
+ return self.processData(package, self.mapSerializableSpecObjects[specName].release) |
|
119 | 135 |
|
120 | 136 |
def getVersion(self, package): |
121 | 137 |
specName=self.getSpecName(package) |
... | ... |
@@ -194,21 +213,21 @@ class SerializableSpecObjectsUtils(object): |
194 | 194 |
url = self.mapSerializableSpecObjects[specName].url |
195 | 195 |
if url is None: |
196 | 196 |
return None |
197 |
- return self.processData(url) |
|
197 |
+ return self.processData(package, url) |
|
198 | 198 |
|
199 | 199 |
def getSourceURL(self, package): |
200 | 200 |
specName=self.getSpecName(package) |
201 | 201 |
sourceurl = self.mapSerializableSpecObjects[specName].sourceurl |
202 | 202 |
if sourceurl is None: |
203 | 203 |
return None |
204 |
- return self.processData(sourceurl) |
|
204 |
+ return self.processData(package, sourceurl) |
|
205 | 205 |
|
206 | 206 |
def getLicense(self, package): |
207 | 207 |
specName=self.getSpecName(package) |
208 | 208 |
license = self.mapSerializableSpecObjects[specName].license |
209 | 209 |
if license is None: |
210 | 210 |
return None |
211 |
- return self.processData(license) |
|
211 |
+ return self.processData(package, license) |
|
212 | 212 |
|
213 | 213 |
def printAllObjects(self): |
214 | 214 |
listSpecs=self.mapSerializableSpecObjects.keys() |
... | ... |
@@ -13,6 +13,7 @@ class SpecParser(object): |
13 | 13 |
self.packages={} |
14 | 14 |
self.specAdditionalContent="" |
15 | 15 |
self.globalSecurityHardening="" |
16 |
+ self.defs={} |
|
16 | 17 |
|
17 | 18 |
|
18 | 19 |
def readPkgNameFromPackageMacro(self,data,basePkgName=None): |
... | ... |
@@ -71,6 +72,8 @@ class SpecParser(object): |
71 | 71 |
self.readSecurityHardening(line) |
72 | 72 |
elif self.isChecksum(line): |
73 | 73 |
self.readChecksum(line, self.packages[currentPkg]) |
74 |
+ elif self.isDefinition(line): |
|
75 |
+ self.readDefinition(line) |
|
74 | 76 |
else: |
75 | 77 |
self.specAdditionalContent+=line+"\n" |
76 | 78 |
i=i+1 |
... | ... |
@@ -207,6 +210,20 @@ class SpecParser(object): |
207 | 207 |
return True |
208 | 208 |
return False |
209 | 209 |
|
210 |
+ def isDefinition(self,line): |
|
211 |
+ if re.search('^'+'%define',line) : |
|
212 |
+ return True |
|
213 |
+ if re.search('^'+'%global',line) : |
|
214 |
+ return True |
|
215 |
+ return False |
|
216 |
+ |
|
217 |
+ def readDefinition(self,line): |
|
218 |
+ listDefines=line.split() |
|
219 |
+ if len(listDefines) == 3: |
|
220 |
+ self.defs[listDefines[1]] = listDefines[2] |
|
221 |
+ return True |
|
222 |
+ return False |
|
223 |
+ |
|
210 | 224 |
def readHeader(self,line): |
211 | 225 |
headerSplitIndex=line.find(":") |
212 | 226 |
if(headerSplitIndex+1 == len(line) ): |
... | ... |
@@ -222,6 +222,9 @@ class Specutils(object): |
222 | 222 |
check=True |
223 | 223 |
return check |
224 | 224 |
|
225 |
+ def getDefinitions(self): |
|
226 |
+ return self.spec.defs |
|
227 |
+ |
|
225 | 228 |
def main(): |
226 | 229 |
spec = Specutils("/workspace1/myrepos/photon/SPECS/docker/docker.spec") |
227 | 230 |
print "packages",spec.getPackageNames() |