| 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 <paul.eggleton@linux.intel.com> |
| |
| 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 |
| |