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 /pym | |
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.
Diffstat (limited to 'pym')
-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. |