Bug #278729 - Add an Atom.without_use attribute which is identical to the
authorZac Medico <zmedico@gentoo.org>
Mon, 3 Aug 2009 20:49:09 +0000 (20:49 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 3 Aug 2009 20:49:09 +0000 (20:49 -0000)
atom itself, except without any USE dependencies.

svn path=/main/trunk/; revision=13880

pym/_emerge/depgraph.py
pym/portage/dep.py

index 143a6a8aa72cf486bb8a5527255d1f54ed08c326..34145b40bfce1beb12ae7142036a29a33a1bdf1c 100644 (file)
@@ -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:
index 679a8558df62005e3edeeda29354dcf0cb3ad2d4..64215b68c800aa018c15890536d5831d4f04e4bd 100644 (file)
@@ -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",