summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-05-31 09:11:25 +0000
committerZac Medico <zmedico@gentoo.org>2008-05-31 09:11:25 +0000
commit60f8dd151644aea0547d58bd59733b0466d01298 (patch)
treeb93197cb808c245971b709c46ce8c7ed327c7df7
parent3fffbe3667570d1ee9dc55e799d214e10c79d5b8 (diff)
downloadportage-60f8dd151644aea0547d58bd59733b0466d01298.tar.gz
portage-60f8dd151644aea0547d58bd59733b0466d01298.tar.bz2
portage-60f8dd151644aea0547d58bd59733b0466d01298.zip
* Tweak isvalidatom() to treat "null" category as valid, but missing category
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). svn path=/main/trunk/; revision=10516
-rw-r--r--pym/_emerge/__init__.py3
-rw-r--r--pym/portage/dep.py29
2 files changed, 21 insertions, 11 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 7d9cbdfa8..8a73156e9 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -6427,8 +6427,7 @@ def unmerge(root_config, myopts, 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)
diff --git a/pym/portage/dep.py b/pym/portage/dep.py
index d0e487afc..b3c763f4a 100644
--- a/pym/portage/dep.py
+++ b/pym/portage/dep.py
@@ -593,19 +593,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
@@ -613,7 +624,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: