summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-02-11 16:09:22 -0800
committerZac Medico <zmedico@gentoo.org>2011-02-11 16:09:22 -0800
commit5b16e0d800f34dc90cdd8c505172ad16b97f0af4 (patch)
tree0131bf6b28aa77d47632ebacf025876ff460416c
parente4bcbdace3e0c28c39fdc9a92da38b21611638bf (diff)
downloadportage-5b16e0d800f34dc90cdd8c505172ad16b97f0af4.tar.gz
portage-5b16e0d800f34dc90cdd8c505172ad16b97f0af4.tar.bz2
portage-5b16e0d800f34dc90cdd8c505172ad16b97f0af4.zip
depgraph: fix distorted display of virtuals
As mentioned in bug #353933, comment #4, special new-style virtual atoms generated/distorted by _expand_new_virtuals() can prevent extract_affecting_use() from working properly. This is fixed by saving the original atoms so that the depgraph can map them back into place at the appropriate step in dependency evaluation.
-rw-r--r--pym/_emerge/depgraph.py13
-rw-r--r--pym/portage/dep/dep_check.py6
2 files changed, 19 insertions, 0 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 0cfd1137d..91ec2509d 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -1240,6 +1240,12 @@ class depgraph(object):
for atom, child in self._minimize_children(
pkg, dep_priority, root_config, selected_atoms[pkg]):
+ # If this was a specially generated virtual atom
+ # from dep_check, map it back to the original, in
+ # order to avoid distortion in places like display
+ # or conflict resolution code.
+ atom = getattr(atom, '_orig_atom', atom)
+
if ignore_blockers and atom.blocker:
# For --with-bdeps, ignore build-time only blockers
# that originate from built packages.
@@ -1290,6 +1296,13 @@ class depgraph(object):
for atom, child in self._minimize_children(
pkg, self._priority(runtime=True), root_config, atoms):
+
+ # If this was a specially generated virtual atom
+ # from dep_check, map it back to the original, in
+ # order to avoid distortion in places like display
+ # or conflict resolution code.
+ atom = getattr(atom, '_orig_atom', atom)
+
# This is a GLEP 37 virtual, so its deps are all runtime.
mypriority = self._priority(runtime=True)
if not atom.blocker:
diff --git a/pym/portage/dep/dep_check.py b/pym/portage/dep/dep_check.py
index 6d2d99d35..ed85be618 100644
--- a/pym/portage/dep/dep_check.py
+++ b/pym/portage/dep/dep_check.py
@@ -135,6 +135,12 @@ def _expand_new_virtuals(mysplit, edebug, mydbapi, mysettings, myroot="/",
pkg_use_enabled(parent))
else:
virt_atom = Atom(virt_atom)
+
+ # Allow the depgraph to map this atom back to the
+ # original, in order to avoid distortion in places
+ # like display or conflict resolution code.
+ virt_atom.__dict__['_orig_atom'] = x
+
# According to GLEP 37, RDEPEND is the only dependency
# type that is valid for new-style virtuals. Repoman
# should enforce this.