Browse code

Added support to read macros from spec file

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>

dthaluru authored on 2016/10/18 09:58:09
Showing 3 changed files
... ...
@@ -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()