createrepo: implement recommends support Record against the corresponding requires entry in the output metadata if a dependency relationship is marked with the RPMSENSE_MISSINGOK flag (indicating it is a recommendation, rather than a hard dependency). Upstream-Status: Pending Signed-off-by: Paul Eggleton diff --git a/dumpMetadata.py b/dumpMetadata.py index 70bb2d8..e40e8ac 100644 --- a/dumpMetadata.py +++ b/dumpMetadata.py @@ -319,6 +319,23 @@ class RpmMetaData: reqs.append(0) return reqs + def _checkMissingOk(self, flags): + reqs=[] + if flags is None: + return reqs + + if type(flags) is not types.ListType: + flags = [flags] + for flag in flags: + newflag = flag + if flag is not None: + newflag = flag & rpm.RPMSENSE_MISSINGOK + if newflag: + reqs.append(1) + else: + reqs.append(0) + return reqs + def _correctVersion(self, vers): returnvers = [] @@ -537,9 +554,10 @@ class RpmMetaData: tmpflags = self.hdr[rpm.RPMTAG_REQUIREFLAGS] flags = self._correctFlags(tmpflags) prereq = self._checkPreReq(tmpflags) + missingok = self._checkMissingOk(tmpflags) ver = self._correctVersion(self.hdr[rpm.RPMTAG_REQUIREVERSION]) if names is not None: - lst = zip(names, flags, ver, prereq) + lst = zip(names, flags, ver, prereq, missingok) return self._uniq(lst) def obsoletesList(self): @@ -692,7 +710,7 @@ def generateXML(doc, node, formatns, rpmObj, sumtype): depsList = rpmObj.depsList() if len(depsList) > 0: rpconode = format.newChild(formatns, 'requires', None) - for (name, flags, (e,v,r), prereq) in depsList: + for (name, flags, (e,v,r), prereq, missingok) in depsList: entry = rpconode.newChild(formatns, 'entry', None) entry.newProp('name', name) if flags != 0: @@ -711,6 +729,8 @@ def generateXML(doc, node, formatns, rpmObj, sumtype): entry.newProp('rel', str(r)) if prereq == 1: entry.newProp('pre', str(prereq)) + if missingok: + entry.newProp('missingok', '1') for file in rpmObj.usefulFiles(): files = format.newChild(None, 'file', None) -- 1.7.9.5