From 1e5f4a05993cba14aeb0a9d447e47078a2c5e732 Mon Sep 17 00:00:00 2001 From: Anders F Bjorklund Date: Mon, 12 Sep 2011 12:55:18 +0200 Subject: [PATCH 14/14] backport collapse_glibc_requires --- dumpMetadata.py | 18 +++++++++++++++++- genpkgmetadata.py | 3 ++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/dumpMetadata.py b/dumpMetadata.py index ccc28e7..f594f34 100644 --- a/dumpMetadata.py +++ b/dumpMetadata.py @@ -666,7 +666,7 @@ class RpmMetaData: -def generateXML(doc, node, formatns, rpmObj, sumtype): +def generateXML(doc, node, formatns, rpmObj, sumtype, collapse=False): """takes an xml doc object and a package metadata entry node, populates a package node with the md information""" ns = node.ns() @@ -744,6 +744,22 @@ def generateXML(doc, node, formatns, rpmObj, sumtype): depsList = rpmObj.depsList() if len(depsList) > 0: rpconode = format.newChild(formatns, 'requires', None) + if collapse: + libc_requires = filter(lambda x: x[0].startswith('libc.so.6'), depsList) + if libc_requires: + from operator import itemgetter + def compareVerOnly(v1, v2): + return rpm.labelCompare(('0', str(v1), ''), ('0', str(v2), '')) + rest = sorted(libc_requires, cmp=compareVerOnly, key=itemgetter(0)) + best = rest.pop() + if best[0].startswith('libc.so.6()'): + best = rest.pop() + newlist = [] + for i in depsList: + if i[0].startswith('libc.so.6') and i != best: + continue + newlist.append(i) + depsList = newlist for (name, flags, (e,v,r), prereq, hintreq) in depsList: entry = rpconode.newChild(formatns, 'entry', None) entry.newProp('name', name) diff --git a/genpkgmetadata.py b/genpkgmetadata.py index fb8561a..834ee5c 100755 --- a/genpkgmetadata.py +++ b/genpkgmetadata.py @@ -228,7 +228,7 @@ class MetaDataGenerator: errorprint('\n%s - %s' % (e, file)) return None try: - basenode = dumpMetadata.generateXML(self.basedoc, self.baseroot, self.formatns, mdobj, self.cmds['sumtype']) + basenode = dumpMetadata.generateXML(self.basedoc, self.baseroot, self.formatns, mdobj, self.cmds['sumtype'], self.cmds['collapse_glibc_requires']) except dumpMetadata.MDError, e: errorprint(_('\nAn error occurred creating primary metadata: %s') % e) return None @@ -448,6 +448,7 @@ def parseArgs(args): cmds['skip-symlinks'] = False cmds['skip_stat'] = False cmds['pkglist'] = [] + cmds['collapse_glibc_requires'] = True try: gopts, argsleft = getopt.getopt(args, 'phqVvndg:s:x:u:c:o:CSi:', ['help', 'exclude=', -- 1.7.3.1