diff --git a/pym/_emerge/Blocker.py b/pym/_emerge/Blocker.py index 8546281..5e34e52 100644 --- a/pym/_emerge/Blocker.py +++ b/pym/_emerge/Blocker.py @@ -17,7 +17,7 @@ class Blocker(Task): def __init__(self, **kwargs): Task.__init__(self, **kwargs) - self.cp = portage.dep_getkey(self.atom) + self.cp = self.atom.cp def _get_hash_key(self): hash_key = getattr(self, "_hash_key", None) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index b44e5b1..f64bb1e 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -1149,9 +1149,6 @@ class depgraph(object): for atom in selected_atoms[pkg]: try: - - atom = portage.dep.Atom(atom) - mypriority = dep_priority.copy() if not atom.blocker and vardb.match(atom): mypriority.satisfied = True @@ -1306,16 +1303,15 @@ class depgraph(object): atom_arg_map = self._dynamic_config._atom_arg_map root_config = self._frozen_config.roots[pkg.root] for atom in self._dynamic_config._set_atoms.iterAtomsForPackage(pkg): - atom_cp = portage.dep_getkey(atom) - if atom_cp != pkg.cp and \ - self._have_new_virt(pkg.root, atom_cp): + if atom.cp != pkg.cp and \ + self._have_new_virt(pkg.root, atom.cp): continue visible_pkgs = \ self._dynamic_config._visible_pkgs[pkg.root].match_pkgs(atom) visible_pkgs.reverse() # descending order higher_slot = None for visible_pkg in visible_pkgs: - if visible_pkg.cp != atom_cp: + if visible_pkg.cp != atom.cp: continue if pkg >= visible_pkg: # This is descending order, and we're not @@ -1606,9 +1602,8 @@ class depgraph(object): self._spinner_update() dep = Dependency(atom=atom, onlydeps=onlydeps, root=myroot, parent=arg) - atom_cp = portage.dep_getkey(atom) try: - pprovided = pprovideddict.get(portage.dep_getkey(atom)) + pprovided = pprovideddict.get(atom.cp) if pprovided and portage.match_from_list(atom, pprovided): # A provided package has been specified on the command line. self._dynamic_config._pprovided_args.append((arg, atom)) @@ -1651,10 +1646,10 @@ class depgraph(object): return 0, myfavorites self._dynamic_config._missing_args.append((arg, atom)) continue - if atom_cp != pkg.cp: + if atom.cp != pkg.cp: # For old-style virtuals, we need to repeat the # package.provided check against the selected package. - expanded_atom = atom.replace(atom_cp, pkg.cp) + expanded_atom = atom.replace(atom.cp, pkg.cp) pprovided = pprovideddict.get(pkg.cp) if pprovided and \ portage.match_from_list(expanded_atom, pprovided): @@ -2392,7 +2387,7 @@ class depgraph(object): # Filter out any old-style virtual matches if they are # mixed with new-style virtual matches. - cp = portage.dep_getkey(atom) + cp = atom.cp if len(matched_packages) > 1 and \ "virtual" == portage.catsplit(cp)[0]: for pkg in matched_packages: @@ -2733,8 +2728,8 @@ class depgraph(object): for provider_entry in virtuals[blocker.cp]: provider_cp = \ portage.dep_getkey(provider_entry) - atoms.append(blocker.atom.replace( - blocker.cp, provider_cp)) + atoms.append(portage.dep.Atom(blocker.atom.replace( + blocker.cp, provider_cp))) else: atoms = [blocker.atom] @@ -4892,7 +4887,6 @@ class _dep_check_composite_db(portage.dbapi): # any matching slots in the graph db. slots = set() slots.add(pkg.metadata["SLOT"]) - atom_cp = portage.dep_getkey(atom) if pkg.cp.startswith("virtual/"): # For new-style virtual lookahead that occurs inside # dep_check(), examine all slots. This is needed @@ -4913,7 +4907,7 @@ class _dep_check_composite_db(portage.dbapi): ret.append(pkg.cpv) slots.remove(pkg.metadata["SLOT"]) while slots: - slot_atom = "%s:%s" % (atom_cp, slots.pop()) + slot_atom = "%s:%s" % (atom.cp, slots.pop()) pkg, existing = self._depgraph._select_package( self._root, slot_atom) if not pkg: @@ -5000,7 +4994,6 @@ class _dep_check_composite_db(portage.dbapi): metadata = self._cpv_pkg_map[cpv].metadata return [metadata.get(x, "") for x in wants] - def ambiguous_package_name(arg, atoms, root_config, spinner, myopts): if "--quiet" in myopts: diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 011df67..4d0f605 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -3,7 +3,6 @@ # Distributed under the terms of the GNU General Public License v2 # $Id$ - VERSION="$Rev$"[6:-2] + "-svn" # =========================================================================== @@ -3249,7 +3248,6 @@ class config(object): # an incremental! myincrementals.remove("USE") - mydbs = self.configlist[:-1] mydbs.append(self.backupenv) @@ -6903,7 +6901,6 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0, # so do not check them again. checkme = [] - if not emerge_skip_distfiles and \ need_distfiles and not fetch( fetchme, mysettings, listonly=listonly, fetchonly=fetchonly): @@ -7499,15 +7496,14 @@ def _expand_new_virtuals(mysplit, edebug, mydbapi, mysettings, myroot="/", evaluated_atom += str(x.use.evaluate_conditionals(myuse)) x = portage.dep.Atom(evaluated_atom) - mykey = dep_getkey(x) + mykey = x.cp if not mykey.startswith("virtual/"): newsplit.append(x) if parent_cpv is not None: atom_graph.add(x, parent_cpv) continue mychoices = myvirtuals.get(mykey, []) - isblocker = x.startswith("!") - if isblocker: + if x.blocker: # Virtual blockers are no longer expanded here since # the un-expanded virtual atom is more useful for # maintaining a cache of blocker atoms. @@ -7523,7 +7519,7 @@ def _expand_new_virtuals(mysplit, edebug, mydbapi, mysettings, myroot="/", # TODO: Add PROVIDE check for repoman. a = [] for y in mychoices: - a.append(portage.dep.Atom(x.replace(mykey, str(y.cp), 1))) + a.append(portage.dep.Atom(x.replace(mykey, y.cp, 1))) if not a: newsplit.append(x) elif len(a) == 1: @@ -7597,8 +7593,9 @@ def _expand_new_virtuals(mysplit, edebug, mydbapi, mysettings, myroot="/", # Plain old-style virtuals. New-style virtuals are preferred. if not pkgs: for y in mychoices: - new_atom = portage.dep.Atom( - x.replace(mykey, dep_getkey(y), 1)) + if not isinstance(y, portage.dep.Atom): + y = portage.dep.Atom(y) + new_atom = portage.dep.Atom(x.replace(mykey, y.cp, 1)) matches = portdb.match(new_atom) # portdb is an instance of depgraph._dep_check_composite_db, so # USE conditionals are already evaluated. @@ -7611,9 +7608,8 @@ def _expand_new_virtuals(mysplit, edebug, mydbapi, mysettings, myroot="/", if not a and mychoices: # Check for a virtual package.provided match. for y in mychoices: - new_atom = portage.dep.Atom(x.replace(mykey, dep_getkey(y), 1)) - if match_from_list(new_atom, - pprovideddict.get(new_atom.cp, [])): + new_atom = portage.dep.Atom(x.replace(mykey, y.cp, 1)) + if match_from_list(new_atom, pprovideddict.get(new_atom.cp, [])): a.append(new_atom) if parent_cpv is not None: atom_graph.add(new_atom, parent_cpv) @@ -7724,15 +7720,15 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None): all_use_satisfied = True versions = {} for atom in atoms: - if atom[:1] == "!": + if atom.blocker: continue # Ignore USE dependencies here since we don't want USE # settings to adversely affect || preference evaluation. avail_pkg = mydbapi.match(atom.without_use) if avail_pkg: avail_pkg = avail_pkg[-1] # highest (ascending order) - avail_slot = "%s:%s" % (dep_getkey(atom), - mydbapi.aux_get(avail_pkg, ["SLOT"])[0]) + avail_slot = portage.dep.Atom("%s:%s" % (atom.cp, + mydbapi.aux_get(avail_pkg, ["SLOT"])[0])) if not avail_pkg: all_available = False all_use_satisfied = False @@ -7747,8 +7743,8 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None): avail_pkg_use = avail_pkg_use[-1] if avail_pkg_use != avail_pkg: avail_pkg = avail_pkg_use - avail_slot = "%s:%s" % (dep_getkey(atom), - mydbapi.aux_get(avail_pkg, ["SLOT"])[0]) + avail_slot = portage.dep.Atom("%s:%s" % (atom.cp, + mydbapi.aux_get(avail_pkg, ["SLOT"])[0])) versions[avail_slot] = avail_pkg @@ -7758,8 +7754,7 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None): # If any version of a package is already in the graph then we # assume that it is preferred over other possible packages choices. all_installed = True - for atom in set([dep_getkey(atom) for atom in atoms \ - if atom[:1] != "!"]): + for atom in set( atom.cp for atom in atoms if not atom.blocker ): # New-style virtuals have zero cost to install. if not vardb.match(atom) and not atom.startswith("virtual/"): all_installed = False @@ -7855,14 +7850,16 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None): assert(False) # This point should not be reachable - def dep_expand(mydep, mydb=None, use_cache=1, settings=None): + ''' + @rtype: Atom + ''' if not len(mydep): return mydep if mydep[0]=="*": - mydep=mydep[1:] + mydep=Atom(mydep[1:]) orig_dep = mydep - mydep = dep_getcpv(orig_dep) + mydep = orig_dep.cpv myindex = orig_dep.index(mydep) prefix = orig_dep[:myindex] postfix = orig_dep[myindex+len(mydep):] @@ -7870,11 +7867,12 @@ def dep_expand(mydep, mydb=None, use_cache=1, settings=None): use_cache=use_cache, settings=settings) try: return portage.dep.Atom(prefix + expanded + postfix) - except portage.exception.InvalidAtom: + except portage.exception.InvalidAtom, e: # Missing '=' prefix is allowed for backward compatibility. - if not isvalidatom("=" + prefix + expanded + postfix): - raise - return portage.dep.Atom("=" + prefix + expanded + postfix) + try: + return portage.dep.Atom("=" + prefix + expanded + postfix) + except portage.exception.InvalidAtom: + raise e def dep_check(depstring, mydbapi, mysettings, use="yes", mode=None, myuse=None, use_cache=1, use_binaries=0, myroot="/", trees=None): @@ -7979,7 +7977,7 @@ def dep_wordreduce(mydeplist,mysettings,mydbapi,mode,use_cache=1): elif token[:1] == "!": deplist[mypos] = False else: - mykey = dep_getkey(deplist[mypos]) + mykey = deplist[mypos].cp if mysettings and mykey in mysettings.pprovideddict and \ match_from_list(deplist[mypos], mysettings.pprovideddict[mykey]): deplist[mypos]=True @@ -8009,8 +8007,9 @@ def dep_wordreduce(mydeplist,mysettings,mydbapi,mode,use_cache=1): return None return deplist +_cpv_key_re = re.compile('^' + dep._cpv + '$', re.VERBOSE) def cpv_getkey(mycpv): - return dep.dep_getkey('=' + mycpv) + return _cpv_key_re.match(mycpv).group(2) def key_expand(mykey, mydb=None, use_cache=1, settings=None): mysplit=mykey.split("/") @@ -8331,7 +8330,6 @@ def getmaskingstatus(mycpv, settings=None, portdb=None): return rValue - auxdbkeys=[ 'DEPEND', 'RDEPEND', 'SLOT', 'SRC_URI', 'RESTRICT', 'HOMEPAGE', 'LICENSE', 'DESCRIPTION', @@ -8899,7 +8897,6 @@ def init_legacy_globals(): root = settings["ROOT"] output._init(config_root=settings['PORTAGE_CONFIGROOT']) - # ======================================================================== # COMPATIBILITY # These attributes should not be used diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py index 10baa4b..9dc5671 100644 --- a/pym/portage/dbapi/porttree.py +++ b/pym/portage/dbapi/porttree.py @@ -949,7 +949,7 @@ class portdbapi(dbapi): #this stuff only runs on first call of xmatch() #create mydep, mykey from origdep mydep = dep_expand(origdep, mydb=self, settings=self.mysettings) - mykey = dep_getkey(mydep) + mykey = mydep.cp if level == "list-visible": #a list of all visible packages, not called directly (just by xmatch()) @@ -1133,7 +1133,6 @@ def close_portdbapi_caches(): for i in portdbapi.portdbapi_instances: i.close_caches() - class portagetree(object): def __init__(self, root="/", virtual=None, clone=None, settings=None): """ diff --git a/pym/portage/dep.py b/pym/portage/dep.py index fd41f8f..1f888ec 100644 --- a/pym/portage/dep.py +++ b/pym/portage/dep.py @@ -1024,7 +1024,7 @@ def best_match_to_list(mypkg, mylist): if maxvalue < 3: maxvalue = 3 bestm = x - op_val = operator_values[get_operator(x)] + op_val = operator_values[x.operator] if op_val > maxvalue: maxvalue = op_val bestm = x @@ -1051,9 +1051,9 @@ def match_from_list(mydep, candidate_list): if not isinstance(mydep, Atom): mydep = Atom(mydep) - mycpv = dep_getcpv(mydep) + mycpv = mydep.cpv mycpv_cps = catpkgsplit(mycpv) # Can be None if not specific - slot = dep_getslot(mydep) + slot = mydep.slot if not mycpv_cps: cat, pkg = catsplit(mycpv) @@ -1066,7 +1066,7 @@ def match_from_list(mydep, candidate_list): " (%s) (try adding an '=')") % (mydep)) if ver and rev: - operator = get_operator(mydep) + operator = mydep.operator if not operator: writemsg(_("!!! Invalid atom: %s\n") % mydep, noiselevel=-1) return [] diff --git a/pym/portage/sets/base.py b/pym/portage/sets/base.py index 87a0d1d..086cd1f 100644 --- a/pym/portage/sets/base.py +++ b/pym/portage/sets/base.py @@ -104,9 +104,8 @@ class PackageSet(object): self._atommap.clear() atoms = self._atoms for a in atoms: - cp = dep_getkey(a) - self._atommap.setdefault(cp, set()) - self._atommap[cp].add(a) + self._atommap.setdefault(a.cp, set()) + self._atommap[a.cp].add(a) # Not sure if this one should really be in PackageSet def findAtomForPackage(self, pkg): diff --git a/pym/portage/util.py b/pym/portage/util.py index 3232a4e..0b24d2f 100644