From 30f9eef363cd3e65a2a3c0f428b0ac107e8fc88c Mon Sep 17 00:00:00 2001 From: fuzzyray Date: Thu, 7 May 2009 21:55:32 +0000 Subject: Add patch from Robert Buchholz: Backport SLOT support from Portage 2.2 glsa.py In particular, this is a port of these commits: commit 856616597ee791efa42dd59760db8e50e72efffd Author: zmedico Date: Wed Oct 8 22:35:31 2008 +0000 Fix apparent breakage from r11593 (slot dep support): * Handle KeyError from element.getAttribute() in makeAtom() and * makeVersion(). * Avoid 'sre_constants.error: unmatched group' exceptions in * revisionMatch() when the atom does not have a slot. svn path=/branches/gentoolkit-0.2.4/; revision=624 --- src/glsa-check/glsa.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/glsa-check/glsa.py b/src/glsa-check/glsa.py index b1ff847..de6f48d 100644 --- a/src/glsa-check/glsa.py +++ b/src/glsa-check/glsa.py @@ -273,6 +273,13 @@ def makeAtom(pkgname, versionNode): rValue = opMapping[versionNode.getAttribute("range")] \ + pkgname \ + "-" + getText(versionNode, format="strip") + try: + slot = versionNode.getAttribute("slot").strip() + except KeyError: + pass + else: + if slot and slot != "*": + rValue += ":" + slot return str(rValue) def makeVersion(versionNode): @@ -286,8 +293,16 @@ def makeVersion(versionNode): @rtype: String @return: the version string """ - return opMapping[versionNode.getAttribute("range")] \ + rValue = opMapping[versionNode.getAttribute("range")] \ +getText(versionNode, format="strip") + try: + slot = versionNode.getAttribute("slot").strip() + except KeyError: + pass + else: + if slot and slot != "*": + rValue += ":" + slot + return rValue def match(atom, portdbname, match_type="default"): """ @@ -331,9 +346,15 @@ def revisionMatch(revisionAtom, portdb, match_type="default"): @return: a list with the matching versions """ if match_type == "default" or not hasattr(portdb, "xmatch"): - mylist = portdb.match(re.sub("-r[0-9]+$", "", revisionAtom[2:])) + if ":" in revisionAtom: + mylist = portdb.match(re.sub(r'-r[0-9]+(:[^ ]+)?$', r'\1', revisionAtom[2:])) + else: + mylist = portdb.match(re.sub("-r[0-9]+$", "", revisionAtom[2:])) else: - mylist = portdb.xmatch(match_type, re.sub("-r[0-9]+$", "", revisionAtom[2:])) + if ":" in revisionAtom: + mylist = portdb.xmatch(match_type, re.sub(r'-r[0-9]+(:[^ ]+)?$', r'\1', revisionAtom[2:])) + else: + mylist = portdb.xmatch(match_type, re.sub("-r[0-9]+$", "", revisionAtom[2:])) rValue = [] for v in mylist: r1 = portage.pkgsplit(v)[-1][1:] -- cgit v1.2.3