diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-02-11 16:09:22 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-02-11 16:09:22 -0800 |
commit | 5b16e0d800f34dc90cdd8c505172ad16b97f0af4 (patch) | |
tree | 0131bf6b28aa77d47632ebacf025876ff460416c | |
parent | e4bcbdace3e0c28c39fdc9a92da38b21611638bf (diff) | |
download | portage-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.py | 13 | ||||
-rw-r--r-- | pym/portage/dep/dep_check.py | 6 |
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. |