Gentoo Archives: gentoo-commits

From: Brian Dolbec <brian.dolbec@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/
Date: Tue, 26 Nov 2013 13:51:06
Message-Id: 1385457288.98f227be79361d83766b074403efd53f570fa3f3.dol-sen@gentoo
1 commit: 98f227be79361d83766b074403efd53f570fa3f3
2 Author: Sebastian Luther <SebastianLuther <AT> gmx <DOT> de>
3 AuthorDate: Mon Nov 25 18:46:27 2013 +0000
4 Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
5 CommitDate: Tue Nov 26 09:14:48 2013 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=98f227be
7
8 Show packages forcing rebuilds (bug 472104)
9
10 ---
11 pym/_emerge/depgraph.py | 91 +++++++++++++++++++++++++++++++++++++++++++++++++
12 1 file changed, 91 insertions(+)
13
14 diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
15 index 7b77edc..a6efa63 100644
16 --- a/pym/_emerge/depgraph.py
17 +++ b/pym/_emerge/depgraph.py
18 @@ -619,6 +619,94 @@ class depgraph(object):
19 if self._frozen_config.spinner:
20 self._frozen_config.spinner.update()
21
22 + def _compute_abi_rebuild_info(self):
23 + """
24 + Fill self._forced_rebuilds with packages that cause rebuilds.
25 + """
26 +
27 + debug = "--debug" in self._frozen_config.myopts
28 +
29 + # Get all atoms that might have caused a forced rebuild.
30 + atoms = {}
31 + for s in self._dynamic_config._initial_arg_list:
32 + if s.force_reinstall:
33 + root = s.root_config.root
34 + atoms.setdefault(root, set()).update(s.pset)
35 +
36 + if debug:
37 + writemsg_level("forced reinstall atoms:\n",
38 + level=logging.DEBUG, noiselevel=-1)
39 +
40 + for root in atoms:
41 + writemsg_level(" root: %s\n" % root,
42 + level=logging.DEBUG, noiselevel=-1)
43 + for atom in atoms[root]:
44 + writemsg_level(" atom: %s\n" % atom,
45 + level=logging.DEBUG, noiselevel=-1)
46 + writemsg_level("\n\n",
47 + level=logging.DEBUG, noiselevel=-1)
48 +
49 + # Go through all slot operator deps and check if one of these deps
50 + # has a parent that is matched by one of the atoms from above.
51 + forced_rebuilds = {}
52 + for (root, slot_atom), deps in self._dynamic_config._slot_operator_deps.items():
53 + if slot_atom not in atoms.get(root, []):
54 + continue
55 +
56 + for dep in deps:
57 + if dep.parent.installed:
58 + continue
59 +
60 + # The child has forced a rebuild of the parent
61 + forced_rebuilds.setdefault(root, {})
62 + forced_rebuilds[root].setdefault(dep.child, set())
63 + forced_rebuilds[root][dep.child].add(dep.parent)
64 +
65 + if debug:
66 + writemsg_level("slot operator dependencies:\n",
67 + level=logging.DEBUG, noiselevel=-1)
68 +
69 + for (root, slot_atom), deps in self._dynamic_config._slot_operator_deps.items():
70 + writemsg_level(" (%s, %s)\n" % \
71 + (root, slot_atom), level=logging.DEBUG, noiselevel=-1)
72 + for dep in deps:
73 + writemsg_level(" parent: %s\n" % dep.parent, level=logging.DEBUG, noiselevel=-1)
74 + writemsg_level(" child: %s (%s)\n" % (dep.child, dep.priority), level=logging.DEBUG, noiselevel=-1)
75 +
76 + writemsg_level("\n\n",
77 + level=logging.DEBUG, noiselevel=-1)
78 +
79 +
80 + writemsg_level("forced rebuilds:\n",
81 + level=logging.DEBUG, noiselevel=-1)
82 +
83 + for root in forced_rebuilds:
84 + writemsg_level(" root: %s\n" % root,
85 + level=logging.DEBUG, noiselevel=-1)
86 + for child in forced_rebuilds[root]:
87 + writemsg_level(" child: %s\n" % child,
88 + level=logging.DEBUG, noiselevel=-1)
89 + for parent in forced_rebuilds[root][child]:
90 + writemsg_level(" parent: %s\n" % parent,
91 + level=logging.DEBUG, noiselevel=-1)
92 + writemsg_level("\n\n",
93 + level=logging.DEBUG, noiselevel=-1)
94 +
95 + self._forced_rebuilds = forced_rebuilds
96 +
97 + def _show_abi_rebuild_info(self):
98 +
99 + if not self._forced_rebuilds:
100 + return
101 +
102 + writemsg("\nThe following packages are causing rebuilds:\n\n", noiselevel=-1)
103 +
104 + for root in self._forced_rebuilds:
105 + for child in self._forced_rebuilds[root]:
106 + writemsg(" %s causes rebuilds for:\n" % (child,), noiselevel=-1)
107 + for parent in self._forced_rebuilds[root][child]:
108 + writemsg(" %s\n" % (parent,), noiselevel=-1)
109 +
110 def _show_ignored_binaries(self):
111 """
112 Show binaries that have been ignored because their USE didn't
113 @@ -7202,6 +7290,9 @@ class depgraph(object):
114 if not unresolved_conflicts:
115 self._show_missed_update()
116
117 + self._compute_abi_rebuild_info()
118 + self._show_abi_rebuild_info()
119 +
120 self._show_ignored_binaries()
121
122 self._display_autounmask()