From f0d88cdd0befbefd94ba4a9769fac8e964a8d64f Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 3 Aug 2009 20:49:09 +0000 Subject: Bug #278729 - Add an Atom.without_use attribute which is identical to the atom itself, except without any USE dependencies. svn path=/main/trunk/; revision=13880 --- pym/_emerge/depgraph.py | 18 +++--------------- pym/portage/dep.py | 9 ++++++++- 2 files changed, 11 insertions(+), 16 deletions(-) (limited to 'pym') diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 143a6a8aa..34145b40b 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -712,14 +712,8 @@ class depgraph(object): else: # Do not backtrack if only USE have to be changed in # order to satisfy the dependency. - atom_without_use = dep.atom - if dep.atom.use: - atom_without_use = portage.dep.remove_slot(dep.atom) - if dep.atom.slot: - atom_without_use += ":" + dep.atom.slot - atom_without_use = portage.dep.Atom(atom_without_use) dep_pkg, existing_node = \ - self._select_package(dep.root, atom_without_use, + self._select_package(dep.root, atom.without_use, onlydeps=dep.onlydeps) if dep_pkg is None: self._dynamic_config._runtime_pkg_mask.setdefault( @@ -1845,12 +1839,6 @@ class depgraph(object): def _show_unsatisfied_dep(self, root, atom, myparent=None, arg=None): atom = portage.dep.Atom(atom) atom_set = InternalPackageSet(initial_atoms=(atom,)) - atom_without_use = atom - if atom.use: - atom_without_use = portage.dep.remove_slot(atom) - if atom.slot: - atom_without_use += ":" + atom.slot - atom_without_use = portage.dep.Atom(atom_without_use) xinfo = '"%s"' % atom if arg: xinfo='"%s"' % arg @@ -1871,9 +1859,9 @@ class depgraph(object): continue match = db.match if hasattr(db, "xmatch"): - cpv_list = db.xmatch("match-all", atom_without_use) + cpv_list = db.xmatch("match-all", atom.without_use) else: - cpv_list = db.match(atom_without_use) + cpv_list = db.match(atom.without_use) # descending order cpv_list.reverse() for cpv in cpv_list: diff --git a/pym/portage/dep.py b/pym/portage/dep.py index 679a8558d..64215b68c 100644 --- a/pym/portage/dep.py +++ b/pym/portage/dep.py @@ -511,7 +511,7 @@ class Atom(object): _atoms = weakref.WeakValueDictionary() __slots__ = ("__weakref__", "blocker", "cp", "cpv", "operator", - "slot", "use", "_str") + "slot", "use", "without_use", "_str",) class _blocker(object): __slots__ = ("overlap",) @@ -550,9 +550,16 @@ class Atom(object): use = dep_getusedeps(s) if use: use = _use_dep(use) + without_use = remove_slot(self) + if self.slot is not None: + without_use += ":" + self.slot + without_use = Atom(without_use) else: use = None + without_use = self + obj_setattr(self, "use", use) + obj_setattr(self, "without_use", without_use) def __setattr__(self, name, value): raise AttributeError("Atom instances are immutable", -- cgit v1.2.3-1-g7c22