Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH] _slot_operator_update_probe: fix bug #528610
Date: Sun, 16 Nov 2014 07:11:15
Message-Id: 1416121861-28420-1-git-send-email-zmedico@gentoo.org
1 This fixes a case inside _slot_operator_update_probe where it would
2 select an inappropriate replacement_parent of a lower version than
3 desired. The problem is solved by rejecting replacement_parent if its
4 version is lower than the existing parent, and a downgrade is not
5 desired.
6
7 X-Gentoo-Bug: 528610
8 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=528610
9 ---
10 pym/_emerge/depgraph.py | 8 +++
11 ..._slot_operator_update_probe_parent_downgrade.py | 68 ++++++++++++++++++++++
12 2 files changed, 76 insertions(+)
13 create mode 100644 pym/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py
14
15 diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
16 index 94eaed8..2a839d0 100644
17 --- a/pym/_emerge/depgraph.py
18 +++ b/pym/_emerge/depgraph.py
19 @@ -1659,6 +1659,7 @@ class depgraph(object):
20 debug = "--debug" in self._frozen_config.myopts
21 selective = "selective" in self._dynamic_config.myparams
22 want_downgrade = None
23 + want_downgrade_parent = None
24
25 def check_reverse_dependencies(existing_pkg, candidate_pkg,
26 replacement_parent=None):
27 @@ -1706,6 +1707,13 @@ class depgraph(object):
28 for replacement_parent in self._iter_similar_available(dep.parent,
29 dep.parent.slot_atom, autounmask_level=autounmask_level):
30
31 + if replacement_parent < dep.parent:
32 + if want_downgrade_parent is None:
33 + want_downgrade_parent = self._downgrade_probe(
34 + dep.parent)
35 + if not want_downgrade_parent:
36 + continue
37 +
38 if not check_reverse_dependencies(dep.parent, replacement_parent):
39 continue
40
41 diff --git a/pym/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py b/pym/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py
42 new file mode 100644
43 index 0000000..2ec15b6
44 --- /dev/null
45 +++ b/pym/portage/tests/resolver/test_slot_operator_update_probe_parent_downgrade.py
46 @@ -0,0 +1,68 @@
47 +# Copyright 2014 Gentoo Foundation
48 +# Distributed under the terms of the GNU General Public License v2
49 +
50 +from portage.tests import TestCase
51 +from portage.tests.resolver.ResolverPlayground import \
52 + ResolverPlayground, ResolverPlaygroundTestCase
53 +
54 +class SlotOperatorUpdateProbeParentDowngradeTestCase(TestCase):
55 +
56 + def testSlotOperatorUpdateProbeParentDowngrade(self):
57 +
58 + ebuilds = {
59 + "net-nds/openldap-2.4.40-r3": {
60 + "EAPI": "5",
61 + "RDEPEND": "<sys-libs/db-6.0:= " + \
62 + "|| ( sys-libs/db:5.3 sys-libs/db:5.1 )"
63 + },
64 + "net-nds/openldap-2.4.40": {
65 + "EAPI": "5",
66 + "RDEPEND": "sys-libs/db"
67 + },
68 + "sys-libs/db-6.0": {
69 + "SLOT": "6.0",
70 + },
71 + "sys-libs/db-5.3": {
72 + "SLOT": "5.3",
73 + },
74 + }
75 +
76 + installed = {
77 + "net-nds/openldap-2.4.40-r3": {
78 + "EAPI": "5",
79 + "RDEPEND": "<sys-libs/db-6.0:5.3/5.3= " + \
80 + "|| ( sys-libs/db:5.3 sys-libs/db:5.1 )"
81 + },
82 + "sys-libs/db-6.0": {
83 + "SLOT": "6.0",
84 + },
85 + "sys-libs/db-5.3": {
86 + "SLOT": "5.3",
87 + },
88 + }
89 +
90 + world = (
91 + "net-nds/openldap",
92 + )
93 +
94 + test_cases = (
95 + # bug 528610 - openldap rebuild was triggered
96 + # inappropriately, due to slot_operator_update_probe
97 + # selecting an inappropriate replacement parent of
98 + # a lower version than desired.
99 + ResolverPlaygroundTestCase(
100 + ["@world"],
101 + success = True,
102 + options = { "--update": True, "--deep": True },
103 + mergelist = []),
104 + )
105 +
106 + playground = ResolverPlayground(ebuilds=ebuilds,
107 + installed=installed, world=world, debug=False)
108 + try:
109 + for test_case in test_cases:
110 + playground.run_TestCase(test_case)
111 + self.assertEqual(test_case.test_success,
112 + True, test_case.fail_msg)
113 + finally:
114 + playground.cleanup()
115 --
116 2.0.4

Replies