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/_emerge/, man/, pym/portage/tests/resolver/
Date: Wed, 28 Mar 2018 05:56:47
Message-Id: 1522216310.1879d3ca019ebe4b870c3ee8d80910a90a8e4408.zmedico@gentoo
1 commit: 1879d3ca019ebe4b870c3ee8d80910a90a8e4408
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Mon Mar 26 20:59:57 2018 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Wed Mar 28 05:51:50 2018 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=1879d3ca
7
8 emerge: add --changed-slot [ y | n ] option (bug 631358)
9
10 This is similar to --changed-deps, but for SLOT metadata.
11
12 Bug: https://bugs.gentoo.org/631358
13
14 man/emerge.1 | 7 +++++++
15 pym/_emerge/create_depgraph_params.py | 6 ++++++
16 pym/_emerge/depgraph.py | 11 +++++++++++
17 pym/_emerge/main.py | 13 +++++++++++++
18 .../resolver/test_slot_change_without_revbump.py | 19 +++++++++++++++++++
19 5 files changed, 56 insertions(+)
20
21 diff --git a/man/emerge.1 b/man/emerge.1
22 index 27a1193fe..a3c8dd7cd 100644
23 --- a/man/emerge.1
24 +++ b/man/emerge.1
25 @@ -471,6 +471,13 @@ changed since the installed instance was built. Behavior with respect to
26 changed build\-time dependencies is controlled by the
27 \fB\-\-with\-bdeps\fR option.
28 .TP
29 +.BR "\-\-changed\-slot [ y | n ]"
30 +Tells emerge to replace installed packages for which the corresponding
31 +ebuild SLOT metadata has changed since the packages were built. This
32 +option also implies the \fB\-\-selective\fR option. This may also result
33 +in rebuilds for any installed packages that have slot/sub\-slot :=
34 +operator dependencies that are sensitive to the relevant SLOT metadata.
35 +.TP
36 .BR \-\-changed\-use ", " \-U
37 Tells emerge to include installed packages where USE flags have
38 changed since installation. This option also implies the
39
40 diff --git a/pym/_emerge/create_depgraph_params.py b/pym/_emerge/create_depgraph_params.py
41 index ff18f3acc..1fd1f5e36 100644
42 --- a/pym/_emerge/create_depgraph_params.py
43 +++ b/pym/_emerge/create_depgraph_params.py
44 @@ -30,6 +30,7 @@ def create_depgraph_params(myopts, myaction):
45 # with_test_deps: pull in test deps for packages matched by arguments
46 # changed_deps: rebuild installed packages with outdated deps
47 # changed_deps_report: report installed packages with outdated deps
48 + # changed_slot: rebuild installed packages with outdated SLOT metadata
49 # binpkg_changed_deps: reject binary packages with outdated deps
50 myparams = {"recurse" : True}
51
52 @@ -64,12 +65,17 @@ def create_depgraph_params(myopts, myaction):
53 if rebuild_if_new_slot is not None:
54 myparams['rebuild_if_new_slot'] = rebuild_if_new_slot
55
56 + changed_slot = myopts.get('--changed-slot') is True
57 + if changed_slot:
58 + myparams["changed_slot"] = True
59 +
60 if "--update" in myopts or \
61 "--newrepo" in myopts or \
62 "--newuse" in myopts or \
63 "--reinstall" in myopts or \
64 "--noreplace" in myopts or \
65 myopts.get("--changed-deps", "n") != "n" or \
66 + changed_slot or \
67 myopts.get("--selective", "n") != "n":
68 myparams["selective"] = True
69
70
71 diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
72 index ac7ec9d84..6af7d5714 100644
73 --- a/pym/_emerge/depgraph.py
74 +++ b/pym/_emerge/depgraph.py
75 @@ -2667,6 +2667,10 @@ class depgraph(object):
76
77 return changed
78
79 + def _changed_slot(self, pkg):
80 + ebuild = self._equiv_ebuild(pkg)
81 + return ebuild is not None and (ebuild.slot, ebuild.sub_slot) != (pkg.slot, pkg.sub_slot)
82 +
83 def _create_graph(self, allow_unsatisfied=False):
84 dep_stack = self._dynamic_config._dep_stack
85 dep_disjunctive_stack = self._dynamic_config._dep_disjunctive_stack
86 @@ -6474,6 +6478,13 @@ class depgraph(object):
87 modified_use=self._pkg_use_enabled(pkg))):
88 if myeb and "--newrepo" in self._frozen_config.myopts and myeb.repo != pkg.repo:
89 break
90 + elif self._dynamic_config.myparams.get("changed_slot") and self._changed_slot(pkg):
91 + if installed:
92 + break
93 + else:
94 + # Continue searching for a binary package
95 + # with the desired SLOT metadata.
96 + continue
97 elif reinstall_use or (not installed and respect_use):
98 iuses = pkg.iuse.all
99 old_use = self._pkg_use_enabled(pkg)
100
101 diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
102 index 147472cbd..4aa9585fa 100644
103 --- a/pym/_emerge/main.py
104 +++ b/pym/_emerge/main.py
105 @@ -136,6 +136,7 @@ def insert_optional_args(args):
106 '--binpkg-changed-deps' : y_or_n,
107 '--buildpkg' : y_or_n,
108 '--changed-deps' : y_or_n,
109 + '--changed-slot' : y_or_n,
110 '--changed-deps-report' : y_or_n,
111 '--complete-graph' : y_or_n,
112 '--deep' : valid_integers,
113 @@ -416,6 +417,12 @@ def parse_opts(tmpcmdline, silent=False):
114 "choices" : true_y_or_n
115 },
116
117 + "--changed-slot": {
118 + "help" : ("replace installed packages with "
119 + "outdated SLOT metadata"),
120 + "choices" : true_y_or_n
121 + },
122 +
123 "--config-root": {
124 "help":"specify the location for portage configuration files",
125 "action":"store"
126 @@ -852,6 +859,12 @@ def parse_opts(tmpcmdline, silent=False):
127 else:
128 myoptions.changed_deps_report = 'n'
129
130 + if myoptions.changed_slot is not None:
131 + if myoptions.changed_slot in true_y:
132 + myoptions.changed_slot = True
133 + else:
134 + myoptions.changed_slot = None
135 +
136 if myoptions.changed_use is not False:
137 myoptions.reinstall = "changed-use"
138 myoptions.changed_use = False
139
140 diff --git a/pym/portage/tests/resolver/test_slot_change_without_revbump.py b/pym/portage/tests/resolver/test_slot_change_without_revbump.py
141 index d85ff7e05..5cd8c53d1 100644
142 --- a/pym/portage/tests/resolver/test_slot_change_without_revbump.py
143 +++ b/pym/portage/tests/resolver/test_slot_change_without_revbump.py
144 @@ -57,6 +57,25 @@ class SlotChangeWithoutRevBumpTestCase(TestCase):
145 success = True,
146 mergelist = ['app-arch/libarchive-3.1.1', "kde-base/ark-4.10.0"]),
147
148 + ResolverPlaygroundTestCase(
149 + ["app-arch/libarchive"],
150 + options = {"--noreplace": True, "--usepkg": True},
151 + success = True,
152 + mergelist = []),
153 +
154 + ResolverPlaygroundTestCase(
155 + ["app-arch/libarchive"],
156 + options = {"--usepkg": True},
157 + success = True,
158 + mergelist = ["[binary]app-arch/libarchive-3.1.1"]),
159 +
160 + # Test --changed-slot
161 + ResolverPlaygroundTestCase(
162 + ["app-arch/libarchive"],
163 + options = {"--changed-slot": True, "--usepkg": True},
164 + success = True,
165 + mergelist = ["app-arch/libarchive-3.1.1", "kde-base/ark-4.10.0"]),
166 +
167 )
168
169 playground = ResolverPlayground(ebuilds=ebuilds, binpkgs=binpkgs,