1 |
On Mon, 20 Jun 2016 03:28:23 -0700 |
2 |
Zac Medico <zmedico@g.o> wrote: |
3 |
|
4 |
> Fix Scanner not to override portdbapi._aux_cache_keys when generating |
5 |
> manifests, since spawn_nofetch requires additional keys. |
6 |
> |
7 |
> Fixes: 87e32d4863f3 ("repoman: fix KeyError...during manifest |
8 |
> generation (bug 569942)") X-Gentoo-Bug: 585388 |
9 |
> X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=585388 |
10 |
> --- |
11 |
> repoman/pym/repoman/modules/commit/manifest.py | 91 |
12 |
> +++++++++++++------------- |
13 |
> repoman/pym/repoman/scanner.py | 12 +++- 2 files |
14 |
> changed, 53 insertions(+), 50 deletions(-) |
15 |
> |
16 |
> diff --git a/repoman/pym/repoman/modules/commit/manifest.py |
17 |
> b/repoman/pym/repoman/modules/commit/manifest.py index |
18 |
> 475dae4..b338a5b 100644 --- |
19 |
> a/repoman/pym/repoman/modules/commit/manifest.py +++ |
20 |
> b/repoman/pym/repoman/modules/commit/manifest.py @@ -33,55 +33,52 @@ |
21 |
> class Manifest(object): @returns: dictionary |
22 |
> ''' |
23 |
> self.generated_manifest = False |
24 |
> - self.digest_only = self.options.mode != |
25 |
> 'manifest-check' \ |
26 |
> - and self.options.digest == 'y' |
27 |
> - if self.options.mode in ("manifest", 'commit', |
28 |
> 'fix') or self.digest_only: |
29 |
> - failed = False |
30 |
> - self.auto_assumed = set() |
31 |
> - fetchlist_dict = portage.FetchlistDict( |
32 |
> - checkdir, self.repoman_settings, |
33 |
> self.portdb) |
34 |
> - if self.options.mode == 'manifest' and |
35 |
> self.options.force: |
36 |
> - self._discard_dist_digests(checkdir, |
37 |
> fetchlist_dict) |
38 |
> - self.repoman_settings["O"] = checkdir |
39 |
> - try: |
40 |
> - self.generated_manifest = digestgen( |
41 |
> - |
42 |
> mysettings=self.repoman_settings, myportdb=self.portdb) |
43 |
> - except portage.exception.PermissionDenied as |
44 |
> e: |
45 |
> - self.generated_manifest = False |
46 |
> - writemsg_level( |
47 |
> - "!!! Permission denied: |
48 |
> '%s'\n" % (e,), |
49 |
> - level=logging.ERROR, |
50 |
> noiselevel=-1) |
51 |
> + failed = False |
52 |
> + self.auto_assumed = set() |
53 |
> + fetchlist_dict = portage.FetchlistDict( |
54 |
> + checkdir, self.repoman_settings, self.portdb) |
55 |
> + if self.options.mode == 'manifest' and |
56 |
> self.options.force: |
57 |
> + self._discard_dist_digests(checkdir, |
58 |
> fetchlist_dict) |
59 |
> + self.repoman_settings["O"] = checkdir |
60 |
> + try: |
61 |
> + self.generated_manifest = digestgen( |
62 |
> + mysettings=self.repoman_settings, |
63 |
> myportdb=self.portdb) |
64 |
> + except portage.exception.PermissionDenied as e: |
65 |
> + self.generated_manifest = False |
66 |
> + writemsg_level( |
67 |
> + "!!! Permission denied: '%s'\n" % |
68 |
> (e,), |
69 |
> + level=logging.ERROR, noiselevel=-1) |
70 |
> |
71 |
> - if not self.generated_manifest: |
72 |
> - writemsg_level( |
73 |
> - "Unable to generate |
74 |
> manifest.", |
75 |
> - level=logging.ERROR, |
76 |
> noiselevel=-1) |
77 |
> - failed = True |
78 |
> + if not self.generated_manifest: |
79 |
> + writemsg_level( |
80 |
> + "Unable to generate manifest.", |
81 |
> + level=logging.ERROR, noiselevel=-1) |
82 |
> + failed = True |
83 |
> |
84 |
> - if self.options.mode == "manifest": |
85 |
> - if not failed and self.options.force |
86 |
> and self.auto_assumed and \ |
87 |
> - 'assume-digests' in |
88 |
> self.repoman_settings.features: |
89 |
> - # Show which digests were |
90 |
> assumed despite the --force option |
91 |
> - # being given. This output |
92 |
> will already have been shown by |
93 |
> - # digestgen() if |
94 |
> assume-digests is not enabled, so only show |
95 |
> - # it here if assume-digests |
96 |
> is enabled. |
97 |
> - pkgs = list(fetchlist_dict) |
98 |
> - pkgs.sort() |
99 |
> - portage.writemsg_stdout( |
100 |
> - " digest.assumed |
101 |
> %s" % |
102 |
> - |
103 |
> portage.output.colorize( |
104 |
> - "WARN", |
105 |
> str(len(self.auto_assumed)).rjust(18)) + "\n") |
106 |
> - for cpv in pkgs: |
107 |
> - fetchmap = |
108 |
> fetchlist_dict[cpv] |
109 |
> - pf = |
110 |
> portage.catsplit(cpv)[1] |
111 |
> - for distfile in |
112 |
> sorted(fetchmap): |
113 |
> - if distfile |
114 |
> in self.auto_assumed: |
115 |
> - |
116 |
> portage.writemsg_stdout( |
117 |
> - " |
118 |
> %s::%s\n" % (pf, distfile)) |
119 |
> - # continue, skip remaining main loop |
120 |
> code |
121 |
> - return True |
122 |
> - elif failed: |
123 |
> - sys.exit(1) |
124 |
> + if self.options.mode == "manifest": |
125 |
> + if not failed and self.options.force and |
126 |
> self.auto_assumed and \ |
127 |
> + 'assume-digests' in |
128 |
> self.repoman_settings.features: |
129 |
> + # Show which digests were assumed |
130 |
> despite the --force option |
131 |
> + # being given. This output will |
132 |
> already have been shown by |
133 |
> + # digestgen() if assume-digests is |
134 |
> not enabled, so only show |
135 |
> + # it here if assume-digests is |
136 |
> enabled. |
137 |
> + pkgs = list(fetchlist_dict) |
138 |
> + pkgs.sort() |
139 |
> + portage.writemsg_stdout( |
140 |
> + " digest.assumed %s" % |
141 |
> + portage.output.colorize( |
142 |
> + "WARN", |
143 |
> str(len(self.auto_assumed)).rjust(18)) + "\n") |
144 |
> + for cpv in pkgs: |
145 |
> + fetchmap = |
146 |
> fetchlist_dict[cpv] |
147 |
> + pf = portage.catsplit(cpv)[1] |
148 |
> + for distfile in |
149 |
> sorted(fetchmap): |
150 |
> + if distfile in |
151 |
> self.auto_assumed: |
152 |
> + |
153 |
> portage.writemsg_stdout( |
154 |
> + " |
155 |
> %s::%s\n" % (pf, distfile)) |
156 |
> + # continue, skip remaining main loop code |
157 |
> + return True |
158 |
> + elif failed: |
159 |
> + sys.exit(1) |
160 |
> return False |
161 |
> |
162 |
> def _discard_dist_digests(self, checkdir, fetchlist_dict): |
163 |
> diff --git a/repoman/pym/repoman/scanner.py |
164 |
> b/repoman/pym/repoman/scanner.py index f72af9c..d7cd81f 100644 |
165 |
> --- a/repoman/pym/repoman/scanner.py |
166 |
> +++ b/repoman/pym/repoman/scanner.py |
167 |
> @@ -60,9 +60,15 @@ class Scanner(object): |
168 |
> |
169 |
> self.portdb = repo_settings.portdb |
170 |
> self.portdb.settings = |
171 |
> self.repo_settings.repoman_settings + |
172 |
> + digest_only = self.options.mode != 'manifest-check' \ |
173 |
> + and self.options.digest == 'y' |
174 |
> + self.generate_manifest = digest_only or |
175 |
> self.options.mode in \ |
176 |
> + ("manifest", 'commit', 'fix') |
177 |
> + |
178 |
> # We really only need to cache the metadata that's |
179 |
> necessary for visibility # filtering. Anything else can be discarded |
180 |
> to reduce memory consumption. |
181 |
> - if self.options.mode != "manifest" and |
182 |
> self.options.digest != "y": |
183 |
> + if not self.generate_manifest: |
184 |
> # Don't do this when generating manifests, |
185 |
> since that uses # additional keys if spawn_nofetch is called |
186 |
> (RESTRICT and # DEFINED_PHASES). |
187 |
> @@ -286,8 +292,8 @@ class Scanner(object): |
188 |
> if self.kwargs['checks']['ebuild_notadded']: |
189 |
> self.vcs_settings.status.check(checkdir, |
190 |
> checkdir_relative, xpkg) |
191 |
> - manifester = manifest.Manifest(**self.kwargs) |
192 |
> - manifester.update_manifest(checkdir) |
193 |
> + if self.generate_manifest: |
194 |
> + |
195 |
> manifest.Manifest(**self.kwargs).update_manifest(checkdir) |
196 |
> checkdirlist = os.listdir(checkdir) |
197 |
> dynamic_data = { |
198 |
|
199 |
|
200 |
Works for me :) |
201 |
|
202 |
-- |
203 |
Brian Dolbec <dolsen> |