Add patch from Robert Buchholz:
authorfuzzyray <fuzzyray@gentoo.org>
Thu, 7 May 2009 22:01:50 +0000 (22:01 -0000)
committerfuzzyray <fuzzyray@gentoo.org>
Thu, 7 May 2009 22:01:50 +0000 (22:01 -0000)
Backport SLOT support from Portage 2.2 glsa.py

In particular, this is a port of these commits:
commit 856616597ee791efa42dd59760db8e50e72efffd
Author: zmedico <zmedico@ac592a22-f3fe-0310-977e-98394eae9e84>
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=/trunk/gentoolkit/; revision=629

pym/gentoolkit/glsa/__init__.py

index 86a6dd354b995867a7cecc32d34fcd867ab1afb8..313c1f48863392b20e979f89e2120c603c9e286f 100644 (file)
@@ -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:]