From 60f8dd151644aea0547d58bd59733b0466d01298 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 31 May 2008 09:11:25 +0000 Subject: * 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 --- pym/_emerge/__init__.py | 3 +-- 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: -- cgit v1.2.3-1-g7c22