Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 204597 Details for
Bug 276813
sys-apps/portage Performance improvement
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Use existing atom instances instead of doing Atom(Atom)
avoid_unnecessary_atom_creation.patch (text/plain), 13.67 KB, created by
Marat Radchenko
on 2009-09-19 13:18:47 UTC
(
hide
)
Description:
Use existing atom instances instead of doing Atom(Atom)
Filename:
MIME Type:
Creator:
Marat Radchenko
Created:
2009-09-19 13:18:47 UTC
Size:
13.67 KB
patch
obsolete
>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
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 276813
:
196987
|
197434
|
197437
|
197827
|
198253
|
203267
|
203269
|
203406
|
203509
|
203512
|
203515
|
203519
|
204572
|
204597
|
204673
|
204685
|
204770
|
204883
|
204996
|
205039