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