* Tweak isvalidatom() to treat "null" category as valid, but missing category
authorZac Medico <zmedico@gentoo.org>
Sat, 31 May 2008 09:17:07 +0000 (09:17 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 31 May 2008 09:17:07 +0000 (09:17 -0000)
  as invalid (previously both where treated as invalid).

* Fix a spot inside emerge's unmerge() function that sometimes generates
  invalid atoms by adding an unnecessary "=" to the front. Even when in
  cases that resulted in a valid atom here, adding the "=" was redundant
  because dep_expand() does that automatically now (for backward compat).
(trunk r10516)

svn path=/main/branches/2.1.2/; revision=10517

bin/emerge
pym/portage_dep.py

index a1761e7e7ccc7606fe13d9b0bf4e9d6e42dbeca9..886d2a2ef9877c0330d20e53f53a5c5f62a0c7f2 100755 (executable)
@@ -6510,8 +6510,7 @@ def unmerge(settings, myopts, vartree, unmerge_action,
                                sys.exit(1)
        
                        if not mymatch and x[0] not in "<>=~":
-                               #add a "=" if missing
-                               mymatch=localtree.dep_match("="+x)
+                               mymatch = localtree.dep_match(x)
                        if not mymatch:
                                portage.writemsg("\n--- Couldn't find '%s' to %s.\n" % \
                                        (x, unmerge_action), noiselevel=-1)
index 44878e91370bc6775eb0a106c8ade6059489a7d6..1e65b7e2423a213b0649f9feef8d7db5305712f6 100644 (file)
@@ -433,19 +433,30 @@ def isvalidatom(atom, allow_blockers=False):
        if allow_blockers and atom.startswith("!"):
                atom = atom[1:]
        cpv = dep_getcpv(atom)
+       cpv_catsplit = catsplit(cpv)
+       mycpv_cps = None
        if cpv:
-               if _valid_category.match(catsplit(cpv)[0]) is None:
-                       return 0
-               mycpv_cps = catpkgsplit(cpv)
-       else:
-               mycpv_cps = None
+               if len(cpv_catsplit) == 2:
+                       if _valid_category.match(cpv_catsplit[0]) is None:
+                               return 0
+                       if cpv_catsplit[0] == "null":
+                               # "null" category is valid, missing category is not.
+                               mycpv_cps = catpkgsplit(cpv.replace("null/", "cat/", 1))
+                               if mycpv_cps:
+                                       mycpv_cps[0] = "null"
+               if not mycpv_cps:
+                       mycpv_cps = catpkgsplit(cpv)
+
        operator = get_operator(atom)
        if operator:
                if operator[0] in "<>" and remove_slot(atom).endswith("*"):
                        return 0
-               if mycpv_cps and mycpv_cps[0] != "null":
-                       # >=cat/pkg-1.0
-                       return 1
+               if mycpv_cps:
+                       if len(cpv_catsplit) == 2:
+                               # >=cat/pkg-1.0
+                               return 1
+                       else:
+                               return 0
                else:
                        # >=cat/pkg or >=pkg-1.0 (no category)
                        return 0
@@ -453,7 +464,7 @@ def isvalidatom(atom, allow_blockers=False):
                # cat/pkg-1.0
                return 0
 
-       if (len(atom.split('/')) == 2):
+       if len(cpv_catsplit) == 2:
                # cat/pkg
                return 1
        else: