1 |
commit: 5d26fe64b1f8b56f1f3e588921f33bc9df4da78d |
2 |
Author: David James <davidjames <AT> chromium <DOT> org> |
3 |
AuthorDate: Tue May 3 20:10:28 2011 +0000 |
4 |
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue May 3 22:47:25 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5d26fe64 |
7 |
|
8 |
rebuild_config: propagate runtime deps to parents |
9 |
|
10 |
Update rebuild option to propagate runtime deps to parents. |
11 |
|
12 |
Suggested by SebastianLuther <AT> gmx.de |
13 |
|
14 |
BUG=chromium-os:14858 |
15 |
TEST=Added unit test. Ran unit tests. |
16 |
|
17 |
Change-Id: I7228a8558eddd1956c590de39430172476c66228 |
18 |
|
19 |
Review URL: http://gerrit.chromium.org/gerrit/202 |
20 |
|
21 |
--- |
22 |
pym/_emerge/depgraph.py | 12 ++++++++---- |
23 |
pym/portage/tests/resolver/test_rebuild.py | 9 +++++++-- |
24 |
2 files changed, 15 insertions(+), 6 deletions(-) |
25 |
|
26 |
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py |
27 |
index 8a76863..0de443b 100644 |
28 |
--- a/pym/_emerge/depgraph.py |
29 |
+++ b/pym/_emerge/depgraph.py |
30 |
@@ -267,15 +267,21 @@ class _rebuild_config(object): |
31 |
# Remove our leaf node from the graph, keeping track of deps. |
32 |
parents = graph.nodes[node][1].items() |
33 |
graph.remove(node) |
34 |
+ node_build_deps = build_deps.get(node, {}) |
35 |
+ node_runtime_deps = runtime_deps.get(node, {}) |
36 |
for parent, priorities in parents: |
37 |
if parent == node: |
38 |
# Ignore a direct cycle. |
39 |
continue |
40 |
+ parent_bdeps = build_deps.setdefault(parent, {}) |
41 |
+ parent_rdeps = runtime_deps.setdefault(parent, {}) |
42 |
for priority in priorities: |
43 |
if priority.buildtime: |
44 |
- build_deps.setdefault(parent, {})[slot_atom] = node |
45 |
+ parent_bdeps[slot_atom] = node |
46 |
if priority.runtime: |
47 |
- runtime_deps.setdefault(parent, {})[slot_atom] = node |
48 |
+ parent_rdeps[slot_atom] = node |
49 |
+ if slot_atom in parent_bdeps and slot_atom in parent_rdeps: |
50 |
+ parent_rdeps.update(node_runtime_deps) |
51 |
if not graph.child_nodes(parent): |
52 |
leaf_nodes.append(parent) |
53 |
|
54 |
@@ -284,8 +290,6 @@ class _rebuild_config(object): |
55 |
# completely filled in, and self.rebuild_list / self.reinstall_list |
56 |
# will tell us whether any of our children need to be rebuilt or |
57 |
# reinstalled. |
58 |
- node_build_deps = build_deps.get(node, {}) |
59 |
- node_runtime_deps = runtime_deps.get(node, {}) |
60 |
if self._trigger_rebuild(node, node_build_deps, node_runtime_deps): |
61 |
need_restart = True |
62 |
|
63 |
|
64 |
diff --git a/pym/portage/tests/resolver/test_rebuild.py b/pym/portage/tests/resolver/test_rebuild.py |
65 |
index 809dbed..fda289c 100644 |
66 |
--- a/pym/portage/tests/resolver/test_rebuild.py |
67 |
+++ b/pym/portage/tests/resolver/test_rebuild.py |
68 |
@@ -26,6 +26,8 @@ class RebuildTestCase(TestCase): |
69 |
"sys-apps/d-2": { "RDEPEND" : "sys-libs/x"}, |
70 |
"sys-apps/e-2": { "DEPEND" : "sys-libs/x", "RDEPEND" : "sys-libs/x"}, |
71 |
"sys-apps/f-2": { "DEPEND" : "sys-apps/a", "RDEPEND" : "sys-apps/a"}, |
72 |
+ "sys-apps/g-2": { "DEPEND" : "sys-apps/b sys-libs/x", |
73 |
+ "RDEPEND" : "sys-apps/b"}, |
74 |
} |
75 |
|
76 |
installed = { |
77 |
@@ -36,10 +38,12 @@ class RebuildTestCase(TestCase): |
78 |
"sys-apps/d-1": { "RDEPEND" : "sys-libs/x"}, |
79 |
"sys-apps/e-1": { "DEPEND" : "sys-libs/x", "RDEPEND" : "sys-libs/x"}, |
80 |
"sys-apps/f-1": { "DEPEND" : "sys-apps/a", "RDEPEND" : "sys-apps/a"}, |
81 |
+ "sys-apps/g-1": { "DEPEND" : "sys-apps/b sys-libs/x", |
82 |
+ "RDEPEND" : "sys-apps/b"}, |
83 |
} |
84 |
|
85 |
world = ["sys-apps/a", "sys-apps/b", "sys-apps/c", "sys-apps/d", |
86 |
- "sys-apps/e", "sys-apps/f"] |
87 |
+ "sys-apps/e", "sys-apps/f", "sys-apps/g"] |
88 |
|
89 |
test_cases = ( |
90 |
ResolverPlaygroundTestCase( |
91 |
@@ -53,7 +57,8 @@ class RebuildTestCase(TestCase): |
92 |
ResolverPlaygroundTestCase( |
93 |
["sys-libs/x"], |
94 |
options = {"--rebuild" : True}, |
95 |
- mergelist = ['sys-libs/x-2', 'sys-apps/a-2', 'sys-apps/b-2', 'sys-apps/e-2'], |
96 |
+ mergelist = ['sys-libs/x-2', 'sys-apps/a-2', 'sys-apps/b-2', |
97 |
+ 'sys-apps/e-2', 'sys-apps/g-2'], |
98 |
ignore_mergelist_order = True, |
99 |
success = True), |
100 |
) |