summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2017-09-24 11:52:22 -0700
committerZac Medico <zmedico@gentoo.org>2017-09-24 19:03:08 -0700
commit5b286b267cb5cc69cac1c99ec8704ff0e0463e11 (patch)
tree4ae38c60e1f5ab6f404a7e0f374d3cc1a57d22bc
parentpostinst-qa-check.d: remove redundant local vars and obsolete comments (diff)
downloadportage-5b286b267cb5cc69cac1c99ec8704ff0e0463e11.tar.gz
portage-5b286b267cb5cc69cac1c99ec8704ff0e0463e11.tar.bz2
portage-5b286b267cb5cc69cac1c99ec8704ff0e0463e11.zip
depgraph: make _minimize_children deterministic (bug 631894)
In order for the eliminate_pkg loop to produce deterministic results, the order of the pkgs list must not be random. Prefer to eliminate installed packages first, in case rebuilds are needed, and also sort in ascending order so that older versions are eliminated first. X-Gentoo-bug: 631894 X-Gentoo-bug-url: https://bugs.gentoo.org/631894 Reviewed-by: Manuel RĂ¼ger <mrueg@gentoo.org>
-rw-r--r--pym/_emerge/depgraph.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index b4fc5f297..785c036b8 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -3584,6 +3584,15 @@ class depgraph(object):
if atom_set.findAtomForPackage(pkg2, modified_use=self._pkg_use_enabled(pkg2)):
atom_pkg_graph.add(pkg2, atom)
+ # In order for the following eliminate_pkg loop to produce
+ # deterministic results, the order of the pkgs list must
+ # not be random (bug 631894). Prefer to eliminate installed
+ # packages first, in case rebuilds are needed, and also sort
+ # in ascending order so that older versions are eliminated
+ # first.
+ pkgs = (sorted(pkg for pkg in pkgs if pkg.installed) +
+ sorted(pkg for pkg in pkgs if not pkg.installed))
+
for pkg in pkgs:
eliminate_pkg = True
for atom in atom_pkg_graph.parent_nodes(pkg):