Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/dep/, pym/_emerge/
Date: Tue, 31 May 2011 02:18:24
Message-Id: 4f66159887fc4e3ec8bd87ae0f08ba249f98631b.zmedico@gentoo
1 commit: 4f66159887fc4e3ec8bd87ae0f08ba249f98631b
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Tue May 31 02:16:43 2011 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Tue May 31 02:16:43 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=4f661598
7
8 dep_zapdeps: use digraph for preference selection
9
10 This is required in order for dep_zapdeps to work as intended for
11 solving cases of bug #264434 in which there is an installed
12 package that may need to be uninstalled in order to resolve blockers.
13 It fixes a failure to resolve blockers when attempting to replace
14 media-video/ffmpeg with media-video/libav (symptom is similar to
15 bug #339164, but with new-style virtual instead of old-style PROVIDE
16 virtual).
17
18 ---
19 pym/_emerge/depgraph.py | 3 +++
20 pym/portage/dep/dep_check.py | 11 +++++++++--
21 2 files changed, 12 insertions(+), 2 deletions(-)
22
23 diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
24 index de75eb1..d05b564 100644
25 --- a/pym/_emerge/depgraph.py
26 +++ b/pym/_emerge/depgraph.py
27 @@ -450,6 +450,8 @@ class _dynamic_depgraph_config(object):
28 # have already been made.
29 self._graph_trees[myroot]["porttree"] = graph_tree
30 self._graph_trees[myroot]["vartree"] = graph_tree
31 + self._graph_trees[myroot]["graph_db"] = graph_tree.dbapi
32 + self._graph_trees[myroot]["graph"] = self.digraph
33 def filtered_tree():
34 pass
35 filtered_tree.dbapi = _dep_check_composite_db(depgraph, myroot)
36 @@ -473,6 +475,7 @@ class _dynamic_depgraph_config(object):
37 # unresolvable direct circular dependencies can be detected and
38 # avoided when possible.
39 self._filtered_trees[myroot]["graph_db"] = graph_tree.dbapi
40 + self._filtered_trees[myroot]["graph"] = self.digraph
41 self._filtered_trees[myroot]["vartree"] = \
42 depgraph._frozen_config.trees[myroot]["vartree"]
43
44
45 diff --git a/pym/portage/dep/dep_check.py b/pym/portage/dep/dep_check.py
46 index 53fce12..01d5021 100644
47 --- a/pym/portage/dep/dep_check.py
48 +++ b/pym/portage/dep/dep_check.py
49 @@ -317,6 +317,7 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None):
50 parent = trees[myroot].get("parent")
51 priority = trees[myroot].get("priority")
52 graph_db = trees[myroot].get("graph_db")
53 + graph = trees[myroot].get("graph")
54 vardb = None
55 if "vartree" in trees[myroot]:
56 vardb = trees[myroot]["vartree"].dbapi
57 @@ -417,8 +418,14 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None):
58 all_in_graph = True
59 for slot_atom in slot_map:
60 # New-style virtuals have zero cost to install.
61 - if not graph_db.match(slot_atom) and \
62 - not slot_atom.startswith("virtual/"):
63 + if slot_atom.startswith("virtual/"):
64 + continue
65 + # We check if the matched package has actually been
66 + # added to the digraph, in order to distinguish between
67 + # those packages and installed packages that may need
68 + # to be uninstalled in order to resolve blockers.
69 + graph_matches = graph_db.match_pkgs(slot_atom)
70 + if not graph_matches or graph_matches[-1] not in graph:
71 all_in_graph = False
72 break
73 circular_atom = None