diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-05-31 09:11:25 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-05-31 09:11:25 +0000 |
commit | 60f8dd151644aea0547d58bd59733b0466d01298 (patch) | |
tree | b93197cb808c245971b709c46ce8c7ed327c7df7 | |
parent | 3fffbe3667570d1ee9dc55e799d214e10c79d5b8 (diff) | |
download | portage-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__.py | 3 | ||||
-rw-r--r-- | pym/portage/dep.py | 29 |
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: |