1 |
commit: aea571e7b772f4c1cf23399dc6e685a123d6982f |
2 |
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Apr 18 07:25:17 2016 +0000 |
4 |
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Apr 25 15:28:53 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=aea571e7 |
7 |
|
8 |
WIP: repoman: convert all modules to the new data transfer system |
9 |
|
10 |
Use Future instances for all non-pointer type variables modified by the modules. |
11 |
Create set_result_pass() and set_result_raise() in ScanBase to reduce code duplication. |
12 |
Create a get_result() in ScanBase which returns either a result or an unset_value rather |
13 |
than raise an InvalidStateError. |
14 |
|
15 |
pym/repoman/modules/scan/arches/arches.py | 7 +++- |
16 |
pym/repoman/modules/scan/depend/__init__.py | 8 ++-- |
17 |
pym/repoman/modules/scan/depend/depend.py | 19 ++++++--- |
18 |
pym/repoman/modules/scan/depend/unknown.py | 10 ++--- |
19 |
pym/repoman/modules/scan/directories/files.py | 2 +- |
20 |
pym/repoman/modules/scan/directories/mtime.py | 6 +-- |
21 |
pym/repoman/modules/scan/eapi/eapi.py | 4 +- |
22 |
pym/repoman/modules/scan/ebuild/__init__.py | 2 +- |
23 |
pym/repoman/modules/scan/ebuild/ebuild.py | 31 +++++++++------ |
24 |
pym/repoman/modules/scan/ebuild/isebuild.py | 28 +++++-------- |
25 |
pym/repoman/modules/scan/ebuild/multicheck.py | 4 +- |
26 |
pym/repoman/modules/scan/eclasses/live.py | 16 ++++---- |
27 |
pym/repoman/modules/scan/eclasses/ruby.py | 6 +-- |
28 |
pym/repoman/modules/scan/fetch/fetches.py | 4 +- |
29 |
pym/repoman/modules/scan/keywords/keywords.py | 8 ++-- |
30 |
pym/repoman/modules/scan/manifest/manifests.py | 6 +-- |
31 |
pym/repoman/modules/scan/metadata/__init__.py | 2 +- |
32 |
pym/repoman/modules/scan/metadata/description.py | 6 +-- |
33 |
.../modules/scan/metadata/ebuild_metadata.py | 16 ++++---- |
34 |
pym/repoman/modules/scan/metadata/license.py | 6 +-- |
35 |
pym/repoman/modules/scan/metadata/pkgmetadata.py | 12 +++++- |
36 |
pym/repoman/modules/scan/metadata/restrict.py | 4 +- |
37 |
pym/repoman/modules/scan/metadata/unused.py | 9 ++--- |
38 |
.../modules/scan/mirrors/thirdpartymirrors.py | 8 ++-- |
39 |
pym/repoman/modules/scan/options/options.py | 4 +- |
40 |
pym/repoman/modules/scan/scanbase.py | 38 +++++++++++++++++- |
41 |
pym/repoman/modules/scan/status/vcsstatus.py | 6 ++- |
42 |
pym/repoman/modules/scan/use/use_flags.py | 15 ++++--- |
43 |
pym/repoman/scanner.py | 46 ++++++++++++++++------ |
44 |
29 files changed, 207 insertions(+), 126 deletions(-) |
45 |
|
46 |
diff --git a/pym/repoman/modules/scan/arches/arches.py b/pym/repoman/modules/scan/arches/arches.py |
47 |
index 90ec04d..8bc7a24 100644 |
48 |
--- a/pym/repoman/modules/scan/arches/arches.py |
49 |
+++ b/pym/repoman/modules/scan/arches/arches.py |
50 |
@@ -23,7 +23,7 @@ class ArchChecks(ScanBase): |
51 |
@param ebuild: Ebuild which we check (object). |
52 |
@returns: dictionary, including arches set |
53 |
''' |
54 |
- ebuild = kwargs.get('ebuild') |
55 |
+ ebuild = kwargs.get('ebuild').result() |
56 |
if self.options.ignore_arches: |
57 |
arches = [[ |
58 |
self.repo_settings.repoman_settings["ARCH"], self.repo_settings.repoman_settings["ARCH"], |
59 |
@@ -67,7 +67,10 @@ class ArchChecks(ScanBase): |
60 |
# Use an empty profile for checking dependencies of |
61 |
# packages that have empty KEYWORDS. |
62 |
arches.add(('**', '**', ('**',))) |
63 |
- return {'continue': False, 'arches': arches} |
64 |
+ # update the dynamic data |
65 |
+ dyn_arches = kwargs.get('arches') |
66 |
+ dyn_arches.update(arches) |
67 |
+ return False |
68 |
|
69 |
@property |
70 |
def runInEbuilds(self): |
71 |
|
72 |
diff --git a/pym/repoman/modules/scan/depend/__init__.py b/pym/repoman/modules/scan/depend/__init__.py |
73 |
index a2b8534..735604d 100644 |
74 |
--- a/pym/repoman/modules/scan/depend/__init__.py |
75 |
+++ b/pym/repoman/modules/scan/depend/__init__.py |
76 |
@@ -21,7 +21,7 @@ module_spec = { |
77 |
'mod_kwargs': ['qatracker', 'portdb' |
78 |
], |
79 |
'func_kwargs': {'ebuild': None, 'pkg': None, 'unknown_pkgs': 'set', |
80 |
- 'type_list': [], 'badlicsyntax': 'Future', |
81 |
+ 'type_list': 'list', 'badlicsyntax': 'Future', |
82 |
'baddepsyntax': 'Future', |
83 |
}, |
84 |
}, |
85 |
@@ -37,8 +37,8 @@ module_spec = { |
86 |
'repo_settings', 'include_arches', 'caches', |
87 |
'repoman_incrementals', 'env', 'have', 'dev_keywords' |
88 |
], |
89 |
- 'func_kwargs': {'arches': 'set', 'ebuild': None, 'pkg': None, |
90 |
- 'unknown_pkgs': 'set', 'baddepsyntax': 'Future', |
91 |
+ 'func_kwargs': {'arches': None, 'ebuild': None, 'pkg': None, |
92 |
+ 'unknown_pkgs': None, 'baddepsyntax': None, |
93 |
}, |
94 |
}, |
95 |
'unknown-module': { |
96 |
@@ -52,7 +52,7 @@ module_spec = { |
97 |
'mod_kwargs': ['qatracker', |
98 |
], |
99 |
'func_kwargs': {'ebuild': None, 'unknown_pkgs': 'set', |
100 |
- 'baddepsyntax': 'Future', |
101 |
+ 'baddepsyntax': None, |
102 |
}, |
103 |
}, |
104 |
} |
105 |
|
106 |
diff --git a/pym/repoman/modules/scan/depend/depend.py b/pym/repoman/modules/scan/depend/depend.py |
107 |
index eaafc95..0efe5de 100644 |
108 |
--- a/pym/repoman/modules/scan/depend/depend.py |
109 |
+++ b/pym/repoman/modules/scan/depend/depend.py |
110 |
@@ -26,11 +26,10 @@ class DependChecks(ScanBase): |
111 |
|
112 |
@param pkg: Package in which we check (object). |
113 |
@param ebuild: Ebuild which we check (object). |
114 |
- @returns: dictionary including {unknown_pkgs, type_list, |
115 |
- badlicsyntax, baddepsyntax} |
116 |
+ @returns: boolean |
117 |
''' |
118 |
- ebuild = kwargs.get('ebuild') |
119 |
- pkg = kwargs.get('pkg') |
120 |
+ ebuild = kwargs.get('ebuild').result() |
121 |
+ pkg = kwargs.get('pkg').result() |
122 |
|
123 |
unknown_pkgs = set() |
124 |
|
125 |
@@ -144,8 +143,16 @@ class DependChecks(ScanBase): |
126 |
badlicsyntax = badlicsyntax > 0 |
127 |
#badprovsyntax = badprovsyntax > 0 |
128 |
|
129 |
- return {'continue': False, 'unknown_pkgs': unknown_pkgs, 'type_list': type_list, |
130 |
- 'badlicsyntax': badlicsyntax, 'baddepsyntax': baddepsyntax} |
131 |
+ # update the dynamic data |
132 |
+ dyn_unknown = kwargs.get('unknown_pkgs') |
133 |
+ dyn_unknown.update(unknown_pkgs) |
134 |
+ dyn_type_list = kwargs.get('type_list') |
135 |
+ dyn_type_list.extend(type_list) |
136 |
+ self.set_result_pass([ |
137 |
+ (kwargs.get('badlicsyntax'), badlicsyntax), |
138 |
+ (kwargs.get('baddepsyntax'), baddepsyntax), |
139 |
+ ]) |
140 |
+ return False |
141 |
|
142 |
@property |
143 |
def runInEbuilds(self): |
144 |
|
145 |
diff --git a/pym/repoman/modules/scan/depend/unknown.py b/pym/repoman/modules/scan/depend/unknown.py |
146 |
index 3aa7c79..9e8f7f8 100644 |
147 |
--- a/pym/repoman/modules/scan/depend/unknown.py |
148 |
+++ b/pym/repoman/modules/scan/depend/unknown.py |
149 |
@@ -16,13 +16,13 @@ class DependUnknown(ScanBase): |
150 |
def check(self, **kwargs): |
151 |
'''Perform unknown dependancy checks |
152 |
|
153 |
- @param ebuild: Ebuild which we check (object). |
154 |
- @param baddepsyntax: boolean |
155 |
+ @param ebuild: Future.result == Ebuild which we check (object). |
156 |
+ @param baddepsyntax: Future.result == boolean |
157 |
@param unknown_pkgs: set of tuples (type, atom.unevaluated_atom) |
158 |
@returns: dictionary |
159 |
''' |
160 |
- ebuild = kwargs.get('ebuild') |
161 |
- baddepsyntax = kwargs.get('baddepsyntax') |
162 |
+ ebuild = kwargs.get('ebuild').result() |
163 |
+ baddepsyntax = self.get_result(kwargs.get('baddepsyntax'), False) |
164 |
unknown_pkgs = kwargs.get('unknown_pkgs') |
165 |
|
166 |
if not baddepsyntax and unknown_pkgs: |
167 |
@@ -33,7 +33,7 @@ class DependUnknown(ScanBase): |
168 |
self.qatracker.add_error( |
169 |
"dependency.unknown", "%s: %s: %s" |
170 |
% (ebuild.relative_path, mytype, ", ".join(sorted(atoms)))) |
171 |
- return {'continue': False} |
172 |
+ return False |
173 |
|
174 |
@property |
175 |
def runInEbuilds(self): |
176 |
|
177 |
diff --git a/pym/repoman/modules/scan/directories/files.py b/pym/repoman/modules/scan/directories/files.py |
178 |
index a394658..94a0791 100644 |
179 |
--- a/pym/repoman/modules/scan/directories/files.py |
180 |
+++ b/pym/repoman/modules/scan/directories/files.py |
181 |
@@ -86,7 +86,7 @@ class FileChecks(ScanBase): |
182 |
finally: |
183 |
if f is not None: |
184 |
f.close() |
185 |
- return {'continue': False} |
186 |
+ return False |
187 |
|
188 |
@property |
189 |
def runInPkgs(self): |
190 |
|
191 |
diff --git a/pym/repoman/modules/scan/directories/mtime.py b/pym/repoman/modules/scan/directories/mtime.py |
192 |
index 56a7f05..6c667df 100644 |
193 |
--- a/pym/repoman/modules/scan/directories/mtime.py |
194 |
+++ b/pym/repoman/modules/scan/directories/mtime.py |
195 |
@@ -15,14 +15,14 @@ class MtimeChecks(ScanBase): |
196 |
@param changed: dictionary instance |
197 |
@returns: dictionary |
198 |
''' |
199 |
- ebuild = kwargs.get('ebuild') |
200 |
+ ebuild = kwargs.get('ebuild').result() |
201 |
changed = kwargs.get('changed') |
202 |
- pkg = kwargs.get('pkg') |
203 |
+ pkg = kwargs.get('pkg').result() |
204 |
if not self.vcs_settings.vcs_preserves_mtime: |
205 |
if ebuild.ebuild_path not in changed.new_ebuilds and \ |
206 |
ebuild.ebuild_path not in changed.ebuilds: |
207 |
pkg.mtime = None |
208 |
- return {'continue': False} |
209 |
+ return False |
210 |
|
211 |
@property |
212 |
def runInEbuilds(self): |
213 |
|
214 |
diff --git a/pym/repoman/modules/scan/eapi/eapi.py b/pym/repoman/modules/scan/eapi/eapi.py |
215 |
index fad1c18..18bab3d 100644 |
216 |
--- a/pym/repoman/modules/scan/eapi/eapi.py |
217 |
+++ b/pym/repoman/modules/scan/eapi/eapi.py |
218 |
@@ -23,11 +23,11 @@ class EAPIChecks(ScanBase): |
219 |
@param ebuild: Ebuild which we check (object). |
220 |
@returns: dictionary |
221 |
''' |
222 |
- ebuild = kwargs.get('ebuild') |
223 |
+ ebuild = kwargs.get('ebuild').result() |
224 |
|
225 |
if not self._checkBanned(ebuild): |
226 |
self._checkDeprecated(ebuild) |
227 |
- return {'continue': False} |
228 |
+ return False |
229 |
|
230 |
def _checkBanned(self, ebuild): |
231 |
if self.repo_settings.repo_config.eapi_is_banned(ebuild.eapi): |
232 |
|
233 |
diff --git a/pym/repoman/modules/scan/ebuild/__init__.py b/pym/repoman/modules/scan/ebuild/__init__.py |
234 |
index eb9098c..ea21ece 100644 |
235 |
--- a/pym/repoman/modules/scan/ebuild/__init__.py |
236 |
+++ b/pym/repoman/modules/scan/ebuild/__init__.py |
237 |
@@ -21,7 +21,7 @@ module_spec = { |
238 |
'mod_kwargs': ['portdb', 'qatracker', 'repo_settings' |
239 |
], |
240 |
'func_kwargs': {'checkdirlist': 'list', 'checkdir': None, 'xpkg': None, |
241 |
- 'validity_fuse': None, 'can_force': 'Future', 'pkgs': 'dict', |
242 |
+ 'validity_fuse': None, 'can_force': None, 'pkgs': 'dict', |
243 |
}, |
244 |
}, |
245 |
'ebuild-module': { |
246 |
|
247 |
diff --git a/pym/repoman/modules/scan/ebuild/ebuild.py b/pym/repoman/modules/scan/ebuild/ebuild.py |
248 |
index 67eee3f..b015985 100644 |
249 |
--- a/pym/repoman/modules/scan/ebuild/ebuild.py |
250 |
+++ b/pym/repoman/modules/scan/ebuild/ebuild.py |
251 |
@@ -8,7 +8,6 @@ from repoman.modules.scan.scanbase import ScanBase |
252 |
# import our initialized portage instance |
253 |
from repoman._portage import portage |
254 |
from portage import os |
255 |
-from portage.util.futures import InvalidStateError |
256 |
|
257 |
pv_toolong_re = re.compile(r'[0-9]{19,}') |
258 |
|
259 |
@@ -86,7 +85,9 @@ class Ebuild(ScanBase): |
260 |
# ebuild not added to vcs |
261 |
self.qatracker.add_error( |
262 |
"ebuild.notadded", self.xpkg + "/" + self.y_ebuild + ".ebuild") |
263 |
- return {'continue': False, 'ebuild': self} |
264 |
+ # update the dynamic data |
265 |
+ self.set_result_raise([('ebuild', self)]) |
266 |
+ return False |
267 |
|
268 |
def set_pkg_data(self, **kwargs): |
269 |
'''Sets some classwide data needed for some of the checks |
270 |
@@ -100,7 +101,7 @@ class Ebuild(ScanBase): |
271 |
self.inherited = self.pkg.inherited |
272 |
self.keywords = self.metadata["KEYWORDS"].split() |
273 |
self.archs = set(kw.lstrip("~") for kw in self.keywords if not kw.startswith("-")) |
274 |
- return {'continue': False} |
275 |
+ return False |
276 |
|
277 |
def bad_split_check(self, **kwargs): |
278 |
'''Checks for bad category/package splits. |
279 |
@@ -117,13 +118,13 @@ class Ebuild(ScanBase): |
280 |
if is_pv_toolong or is_pv_toolong2: |
281 |
self.qatracker.add_error( |
282 |
"ebuild.invalidname", self.xpkg + "/" + self.y_ebuild + ".ebuild") |
283 |
- return {'continue': True} |
284 |
+ return True |
285 |
elif myesplit[0] != pkgdir: |
286 |
print(pkgdir, myesplit[0]) |
287 |
self.qatracker.add_error( |
288 |
"ebuild.namenomatch", self.xpkg + "/" + self.y_ebuild + ".ebuild") |
289 |
- return {'continue': True} |
290 |
- return {'continue': False} |
291 |
+ return True |
292 |
+ return False |
293 |
|
294 |
def pkg_invalid(self, **kwargs): |
295 |
'''Sets some pkg info and checks for invalid packages |
296 |
@@ -136,12 +137,18 @@ class Ebuild(ScanBase): |
297 |
for k, msgs in self.pkg.invalid.items(): |
298 |
for msg in msgs: |
299 |
self.qatracker.add_error(k, "%s: %s" % (self.relative_path, msg)) |
300 |
- try: |
301 |
- fuse.set_result(False) |
302 |
- except InvalidStateError: |
303 |
- pass |
304 |
- return {'continue': True, 'pkg': self.pkg} |
305 |
- return {'continue': False, 'pkg': self.pkg} |
306 |
+ # update the dynamic data |
307 |
+ self.set_result_pass([ |
308 |
+ (fuse, False),]) |
309 |
+ self.set_result_raise([ |
310 |
+ (kwargs.get('pkg'), self.pkg), |
311 |
+ ]) |
312 |
+ return True |
313 |
+ # update the dynamic data |
314 |
+ self.set_result_raise([ |
315 |
+ (kwargs.get('pkg'), self.pkg), |
316 |
+ ]) |
317 |
+ return False |
318 |
|
319 |
@property |
320 |
def runInEbuilds(self): |
321 |
|
322 |
diff --git a/pym/repoman/modules/scan/ebuild/isebuild.py b/pym/repoman/modules/scan/ebuild/isebuild.py |
323 |
index a8870c7..3e288a3 100644 |
324 |
--- a/pym/repoman/modules/scan/ebuild/isebuild.py |
325 |
+++ b/pym/repoman/modules/scan/ebuild/isebuild.py |
326 |
@@ -9,7 +9,6 @@ from _emerge.RootConfig import RootConfig |
327 |
from repoman._portage import portage |
328 |
|
329 |
from portage import os |
330 |
-from portage.util.futures import InvalidStateError |
331 |
|
332 |
from repoman.qa_data import no_exec, allvars |
333 |
from repoman.modules.scan.scanbase import ScanBase |
334 |
@@ -65,24 +64,15 @@ class IsEbuild(ScanBase): |
335 |
try: |
336 |
myaux = dict(zip(allvars, self.portdb.aux_get(cpv, allvars))) |
337 |
except KeyError: |
338 |
- try: |
339 |
- fuse.set_result(False) |
340 |
- except InvalidStateError: |
341 |
- pass |
342 |
+ self.set_result_pass([(fuse, False)]) |
343 |
self.qatracker.add_error("ebuild.syntax", os.path.join(xpkg, y)) |
344 |
continue |
345 |
except IOError: |
346 |
- try: |
347 |
- fuse.set_result(False) |
348 |
- except InvalidStateError: |
349 |
- pass |
350 |
+ self.set_result_pass([(fuse, False)]) |
351 |
self.qatracker.add_error("ebuild.output", os.path.join(xpkg, y)) |
352 |
continue |
353 |
if not portage.eapi_is_supported(myaux["EAPI"]): |
354 |
- try: |
355 |
- fuse.set_result(False) |
356 |
- except InvalidStateError: |
357 |
- pass |
358 |
+ self.set_result_pass([(fuse, False)]) |
359 |
self.qatracker.add_error("EAPI.unsupported", os.path.join(xpkg, y)) |
360 |
continue |
361 |
pkgs[pf] = Package( |
362 |
@@ -96,12 +86,12 @@ class IsEbuild(ScanBase): |
363 |
# metadata leads to false positives for several checks, and false |
364 |
# positives confuse users. |
365 |
self.continue_ = True |
366 |
- try: |
367 |
- fuse.set_result(False) |
368 |
- except InvalidStateError: |
369 |
- pass |
370 |
- |
371 |
- return {'continue': self.continue_, 'pkgs': pkgs} |
372 |
+ self.set_result_pass([(can_force, False)]) |
373 |
+ # set our updated data |
374 |
+ self.set_result_raise([ |
375 |
+ (kwargs.get('pkgs'), pkgs), |
376 |
+ ]) |
377 |
+ return self.continue_ |
378 |
|
379 |
@property |
380 |
def runInPkgs(self): |
381 |
|
382 |
diff --git a/pym/repoman/modules/scan/ebuild/multicheck.py b/pym/repoman/modules/scan/ebuild/multicheck.py |
383 |
index 1d68227..ed7556d 100644 |
384 |
--- a/pym/repoman/modules/scan/ebuild/multicheck.py |
385 |
+++ b/pym/repoman/modules/scan/ebuild/multicheck.py |
386 |
@@ -31,8 +31,8 @@ class MultiCheck(ScanBase): |
387 |
@param ebuild: Ebuild which we check (object). |
388 |
@returns: dictionary |
389 |
''' |
390 |
- ebuild = kwargs.get('ebuild') |
391 |
- pkg = kwargs.get('pkg') |
392 |
+ ebuild = kwargs.get('ebuild').result() |
393 |
+ pkg = kwargs.get('pkg').result() |
394 |
try: |
395 |
# All ebuilds should have utf_8 encoding. |
396 |
f = io.open( |
397 |
|
398 |
diff --git a/pym/repoman/modules/scan/eclasses/live.py b/pym/repoman/modules/scan/eclasses/live.py |
399 |
index 81953af..e5bb7dc 100644 |
400 |
--- a/pym/repoman/modules/scan/eclasses/live.py |
401 |
+++ b/pym/repoman/modules/scan/eclasses/live.py |
402 |
@@ -25,9 +25,11 @@ class LiveEclassChecks(ScanBase): |
403 |
|
404 |
@returns: dictionary, including {live_ebuild} |
405 |
''' |
406 |
- return {'continue': False, |
407 |
- 'live_ebuild': LIVE_ECLASSES.intersection( |
408 |
- kwargs.get('ebuild').inherited)} |
409 |
+ # update the dynamic data |
410 |
+ dyn_live = kwargs.get('live_ebuild') |
411 |
+ dyn_live.update(LIVE_ECLASSES.intersection( |
412 |
+ kwargs.get('ebuild').inherited)) |
413 |
+ return False |
414 |
|
415 |
def check(self, **kwargs): |
416 |
'''Ebuilds that inherit a "Live" eclass (darcs, subversion, git, cvs, |
417 |
@@ -41,15 +43,15 @@ class LiveEclassChecks(ScanBase): |
418 |
@param global_pmaskdict: A global dictionary of all the masks. |
419 |
@returns: dictionary |
420 |
''' |
421 |
- pkg = kwargs.get("pkg") |
422 |
+ pkg = kwargs.get("pkg").result() |
423 |
package = kwargs.get('xpkg') |
424 |
- ebuild = kwargs.get('ebuild') |
425 |
+ ebuild = kwargs.get('ebuild').result() |
426 |
y_ebuild = kwargs.get('y_ebuild') |
427 |
keywords = ebuild.keywords |
428 |
|
429 |
if not (kwargs.get('live_ebuild') and |
430 |
self.repo_settings.repo_config.name == "gentoo"): |
431 |
- return {'continue': False} |
432 |
+ return False |
433 |
|
434 |
is_stable = lambda kw: not kw.startswith("~") and not kw.startswith("-") |
435 |
bad_stable_keywords = list(filter(is_stable, keywords)) |
436 |
@@ -62,7 +64,7 @@ class LiveEclassChecks(ScanBase): |
437 |
good_keywords_exist = len(bad_stable_keywords) < len(keywords) |
438 |
if good_keywords_exist and not self._has_global_mask(pkg, self.pmaskdict): |
439 |
self.qatracker.add_error("LIVEVCS.unmasked", ebuild.relative_path) |
440 |
- return {'continue': False} |
441 |
+ return False |
442 |
|
443 |
@staticmethod |
444 |
def _has_global_mask(pkg, global_pmaskdict): |
445 |
|
446 |
diff --git a/pym/repoman/modules/scan/eclasses/ruby.py b/pym/repoman/modules/scan/eclasses/ruby.py |
447 |
index aa2232a..92b9649 100644 |
448 |
--- a/pym/repoman/modules/scan/eclasses/ruby.py |
449 |
+++ b/pym/repoman/modules/scan/eclasses/ruby.py |
450 |
@@ -25,8 +25,8 @@ class RubyEclassChecks(ScanBase): |
451 |
@param ebuild: Ebuild which we check (object). |
452 |
@returns: dictionary |
453 |
''' |
454 |
- pkg = kwargs.get('pkg') |
455 |
- ebuild = kwargs.get('ebuild') |
456 |
+ pkg = kwargs.get('pkg').result() |
457 |
+ ebuild = kwargs.get('ebuild').result() |
458 |
is_inherited = lambda eclass: eclass in pkg.inherited |
459 |
is_old_ruby_eclass_inherited = filter( |
460 |
is_inherited, self.old_ruby_eclasses) |
461 |
@@ -40,7 +40,7 @@ class RubyEclassChecks(ScanBase): |
462 |
"IUSE.rubydeprecated", |
463 |
(ebuild.relative_path + ": Deprecated ruby target: %s") |
464 |
% myruby) |
465 |
- return {'continue': False} |
466 |
+ return False |
467 |
|
468 |
@property |
469 |
def runInEbuilds(self): |
470 |
|
471 |
diff --git a/pym/repoman/modules/scan/fetch/fetches.py b/pym/repoman/modules/scan/fetch/fetches.py |
472 |
index 6bdcf23..f6adece 100644 |
473 |
--- a/pym/repoman/modules/scan/fetch/fetches.py |
474 |
+++ b/pym/repoman/modules/scan/fetch/fetches.py |
475 |
@@ -130,7 +130,9 @@ class FetchChecks(ScanBase): |
476 |
self.qatracker.add_error( |
477 |
"file.name", |
478 |
"%s/files/%s: char '%s'" % (checkdir, y, y[index])) |
479 |
- return {'continue': False, 'src_uri_error': self._src_uri_error} |
480 |
+ # update the dynamic data |
481 |
+ self.set_result_pass([(kwargs.get('src_uri_error'), self._src_uri_error)]) |
482 |
+ return False |
483 |
|
484 |
def digests(self, checkdir): |
485 |
'''Returns the freshly loaded digests |
486 |
|
487 |
diff --git a/pym/repoman/modules/scan/keywords/keywords.py b/pym/repoman/modules/scan/keywords/keywords.py |
488 |
index 196feb4..ec48bb6 100644 |
489 |
--- a/pym/repoman/modules/scan/keywords/keywords.py |
490 |
+++ b/pym/repoman/modules/scan/keywords/keywords.py |
491 |
@@ -26,7 +26,7 @@ class KeywordChecks(ScanBase): |
492 |
def prepare(self, **kwargs): |
493 |
'''Prepare the checks for the next package.''' |
494 |
self.slot_keywords = {} |
495 |
- return {'continue': False} |
496 |
+ return False |
497 |
|
498 |
def check(self, **kwargs): |
499 |
'''Perform the check. |
500 |
@@ -40,9 +40,9 @@ class KeywordChecks(ScanBase): |
501 |
@param live_ebuild: A boolean that determines if this is a live ebuild. |
502 |
@returns: dictionary |
503 |
''' |
504 |
- pkg = kwargs.get('pkg') |
505 |
+ pkg = kwargs.get('pkg').result() |
506 |
xpkg =kwargs.get('xpkg') |
507 |
- ebuild = kwargs.get('ebuild') |
508 |
+ ebuild = kwargs.get('ebuild').result() |
509 |
y_ebuild = kwargs.get('y_ebuild') |
510 |
changed = kwargs.get('changed') |
511 |
live_ebuild = kwargs.get('live_ebuild') |
512 |
@@ -57,7 +57,7 @@ class KeywordChecks(ScanBase): |
513 |
self._checkForMaskLikeKeywords(xpkg, y_ebuild, ebuild.keywords) |
514 |
|
515 |
self.slot_keywords[pkg.slot].update(ebuild.archs) |
516 |
- return {'continue': False} |
517 |
+ return False |
518 |
|
519 |
@staticmethod |
520 |
def _isKeywordStable(keyword): |
521 |
|
522 |
diff --git a/pym/repoman/modules/scan/manifest/manifests.py b/pym/repoman/modules/scan/manifest/manifests.py |
523 |
index 6f44f8d..2b8d7af 100644 |
524 |
--- a/pym/repoman/modules/scan/manifest/manifests.py |
525 |
+++ b/pym/repoman/modules/scan/manifest/manifests.py |
526 |
@@ -88,14 +88,14 @@ class Manifests(ScanBase): |
527 |
portage.writemsg_stdout( |
528 |
" %s::%s\n" % (pf, distfile)) |
529 |
# continue, skip remaining main loop code |
530 |
- return {'continue': True} |
531 |
+ return True |
532 |
elif failed: |
533 |
sys.exit(1) |
534 |
if not self.generated_manifest: |
535 |
self.digest_check(xpkg, checkdir) |
536 |
if self.options.mode == 'manifest-check': |
537 |
- return {'continue': True} |
538 |
- return {'continue': False} |
539 |
+ return True |
540 |
+ return False |
541 |
|
542 |
def create_manifest(self, checkdir, fetchlist_dict): |
543 |
'''Creates a Manifest file |
544 |
|
545 |
diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py |
546 |
index 1e690bf..af9771b 100644 |
547 |
--- a/pym/repoman/modules/scan/metadata/__init__.py |
548 |
+++ b/pym/repoman/modules/scan/metadata/__init__.py |
549 |
@@ -21,7 +21,7 @@ module_spec = { |
550 |
'mod_kwargs': ['repo_settings', 'qatracker', 'options', 'metadata_dtd', |
551 |
], |
552 |
'func_kwargs': {'xpkg': None, 'checkdir': None, 'checkdirlist': None, |
553 |
- 'repolevel': None, 'muselist': 'set', |
554 |
+ 'repolevel': None, 'muselist': 'Future', |
555 |
}, |
556 |
}, |
557 |
'ebuild-metadata': { |
558 |
|
559 |
diff --git a/pym/repoman/modules/scan/metadata/description.py b/pym/repoman/modules/scan/metadata/description.py |
560 |
index 8059888..8bce8d8 100644 |
561 |
--- a/pym/repoman/modules/scan/metadata/description.py |
562 |
+++ b/pym/repoman/modules/scan/metadata/description.py |
563 |
@@ -21,8 +21,8 @@ class DescriptionChecks(ScanBase): |
564 |
@param pkg: Package in which we check (object). |
565 |
@param ebuild: Ebuild which we check (object). |
566 |
''' |
567 |
- ebuild = kwargs.get('ebuild') |
568 |
- pkg = kwargs.get('pkg') |
569 |
+ ebuild = kwargs.get('ebuild').result() |
570 |
+ pkg = kwargs.get('pkg').result() |
571 |
# 14 is the length of DESCRIPTION="" |
572 |
if len(pkg._metadata['DESCRIPTION']) > max_desc_len: |
573 |
self.qatracker.add_error( |
574 |
@@ -30,7 +30,7 @@ class DescriptionChecks(ScanBase): |
575 |
"%s: DESCRIPTION is %d characters (max %d)" % |
576 |
(ebuild.relative_path, len( |
577 |
pkg._metadata['DESCRIPTION']), max_desc_len)) |
578 |
- return {'continue': False} |
579 |
+ return False |
580 |
|
581 |
@property |
582 |
def runInPkgs(self): |
583 |
|
584 |
diff --git a/pym/repoman/modules/scan/metadata/ebuild_metadata.py b/pym/repoman/modules/scan/metadata/ebuild_metadata.py |
585 |
index ca748de..38b13d5 100644 |
586 |
--- a/pym/repoman/modules/scan/metadata/ebuild_metadata.py |
587 |
+++ b/pym/repoman/modules/scan/metadata/ebuild_metadata.py |
588 |
@@ -20,7 +20,7 @@ class EbuildMetadata(ScanBase): |
589 |
self.qatracker = kwargs.get('qatracker') |
590 |
|
591 |
def invalidchar(self, **kwargs): |
592 |
- ebuild = kwargs.get('ebuild') |
593 |
+ ebuild = kwargs.get('ebuild').result() |
594 |
for k, v in ebuild.metadata.items(): |
595 |
if not isinstance(v, basestring): |
596 |
continue |
597 |
@@ -31,10 +31,10 @@ class EbuildMetadata(ScanBase): |
598 |
"%s: %s variable contains non-ASCII " |
599 |
"character at position %s" % |
600 |
(ebuild.relative_path, k, m.start() + 1)) |
601 |
- return {'continue': False} |
602 |
+ return False |
603 |
|
604 |
def missing(self, **kwargs): |
605 |
- ebuild = kwargs.get('ebuild') |
606 |
+ ebuild = kwargs.get('ebuild').result() |
607 |
for pos, missing_var in enumerate(missingvars): |
608 |
if not ebuild.metadata.get(missing_var): |
609 |
if kwargs.get('catdir') == "virtual" and \ |
610 |
@@ -45,22 +45,22 @@ class EbuildMetadata(ScanBase): |
611 |
myqakey = missingvars[pos] + ".missing" |
612 |
self.qatracker.add_error(myqakey, '%s/%s.ebuild' |
613 |
% (kwargs.get('xpkg'), kwargs.get('y_ebuild'))) |
614 |
- return {'continue': False} |
615 |
+ return False |
616 |
|
617 |
def old_virtual(self, **kwargs): |
618 |
- ebuild = kwargs.get('ebuild') |
619 |
+ ebuild = kwargs.get('ebuild').result() |
620 |
if ebuild.metadata.get("PROVIDE"): |
621 |
self.qatracker.add_error("virtual.oldstyle", ebuild.relative_path) |
622 |
- return {'continue': False} |
623 |
+ return False |
624 |
|
625 |
def virtual(self, **kwargs): |
626 |
- ebuild = kwargs.get('ebuild') |
627 |
+ ebuild = kwargs.get('ebuild').result() |
628 |
if kwargs.get('catdir') == "virtual": |
629 |
for var in ("HOMEPAGE", "LICENSE"): |
630 |
if ebuild.metadata.get(var): |
631 |
myqakey = var + ".virtual" |
632 |
self.qatracker.add_error(myqakey, ebuild.relative_path) |
633 |
- return {'continue': False} |
634 |
+ return False |
635 |
|
636 |
@property |
637 |
def runInPkgs(self): |
638 |
|
639 |
diff --git a/pym/repoman/modules/scan/metadata/license.py b/pym/repoman/modules/scan/metadata/license.py |
640 |
index cccc998..b08834a 100644 |
641 |
--- a/pym/repoman/modules/scan/metadata/license.py |
642 |
+++ b/pym/repoman/modules/scan/metadata/license.py |
643 |
@@ -26,9 +26,9 @@ class LicenseChecks(ScanBase): |
644 |
@param y_ebuild: Ebuild which we check (string). |
645 |
''' |
646 |
xpkg = kwargs.get('xpkg') |
647 |
- ebuild = kwargs.get('ebuild') |
648 |
+ ebuild = kwargs.get('ebuild').result() |
649 |
y_ebuild = kwargs.get('y_ebuild') |
650 |
- if not kwargs.get('badlicsyntax'): |
651 |
+ if not self.get_result(kwargs.get('badlicsyntax'), False): |
652 |
# Parse the LICENSE variable, remove USE conditions and flatten it. |
653 |
licenses = portage.dep.use_reduce( |
654 |
ebuild.metadata["LICENSE"], matchall=1, flat=True) |
655 |
@@ -43,7 +43,7 @@ class LicenseChecks(ScanBase): |
656 |
elif lic in self.repo_metadata['lic_deprecated']: |
657 |
self.qatracker.add_error("LICENSE.deprecated", |
658 |
"%s: %s" % (ebuild.relative_path, lic)) |
659 |
- return {'continue': False} |
660 |
+ return False |
661 |
|
662 |
@property |
663 |
def runInPkgs(self): |
664 |
|
665 |
diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py b/pym/repoman/modules/scan/metadata/pkgmetadata.py |
666 |
index 030cbca..242c923 100644 |
667 |
--- a/pym/repoman/modules/scan/metadata/pkgmetadata.py |
668 |
+++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py |
669 |
@@ -73,7 +73,11 @@ class PkgMetadata(ScanBase): |
670 |
|
671 |
self.musedict = {} |
672 |
if self.options.mode in ['manifest']: |
673 |
- return {'continue': False, 'muselist': frozenset(self.musedict)} |
674 |
+ # update the dynamic data |
675 |
+ self.set_result_raise([ |
676 |
+ (kwargs.get('muselist'), frozenset(self.musedict)) |
677 |
+ ]) |
678 |
+ return False |
679 |
|
680 |
# metadata.xml file check |
681 |
if "metadata.xml" not in checkdirlist: |
682 |
@@ -184,7 +188,11 @@ class PkgMetadata(ScanBase): |
683 |
if not self.xmllint.check(checkdir, repolevel): |
684 |
self.qatracker.add_error("metadata.bad", xpkg + "/metadata.xml") |
685 |
del metadata_bad |
686 |
- return {'continue': False, 'muselist': frozenset(self.musedict)} |
687 |
+ # update the dynamic data |
688 |
+ self.set_result_raise([ |
689 |
+ (kwargs.get('muselist'), frozenset(self.musedict)) |
690 |
+ ]) |
691 |
+ return False |
692 |
|
693 |
@property |
694 |
def runInPkgs(self): |
695 |
|
696 |
diff --git a/pym/repoman/modules/scan/metadata/restrict.py b/pym/repoman/modules/scan/metadata/restrict.py |
697 |
index 25bf56e..044cc2a 100644 |
698 |
--- a/pym/repoman/modules/scan/metadata/restrict.py |
699 |
+++ b/pym/repoman/modules/scan/metadata/restrict.py |
700 |
@@ -21,7 +21,7 @@ class RestrictChecks(ScanBase): |
701 |
|
702 |
def check(self, **kwargs): |
703 |
xpkg = kwargs.get('xpkg') |
704 |
- ebuild = kwargs.get('ebuild') |
705 |
+ ebuild = kwargs.get('ebuild').result() |
706 |
y_ebuild = kwargs.get('y_ebuild') |
707 |
myrestrict = None |
708 |
|
709 |
@@ -41,7 +41,7 @@ class RestrictChecks(ScanBase): |
710 |
for mybad in mybadrestrict: |
711 |
self.qatracker.add_error("RESTRICT.invalid", |
712 |
"%s/%s.ebuild: %s" % (xpkg, y_ebuild, mybad)) |
713 |
- return {'continue': False} |
714 |
+ return False |
715 |
|
716 |
@property |
717 |
def runInPkgs(self): |
718 |
|
719 |
diff --git a/pym/repoman/modules/scan/metadata/unused.py b/pym/repoman/modules/scan/metadata/unused.py |
720 |
index a6ff589..0184d78 100644 |
721 |
--- a/pym/repoman/modules/scan/metadata/unused.py |
722 |
+++ b/pym/repoman/modules/scan/metadata/unused.py |
723 |
@@ -23,12 +23,9 @@ class UnusedCheck(ScanBase): |
724 |
@param validity_future: Future instance |
725 |
''' |
726 |
xpkg = kwargs.get('xpkg') |
727 |
- muselist = kwargs.get('muselist') |
728 |
+ muselist = kwargs.get('muselist').result() |
729 |
used_useflags = kwargs.get('used_useflags') |
730 |
- try: |
731 |
- valid_state = kwargs['validity_future'].result() |
732 |
- except InvalidStateError: |
733 |
- valid_state = True |
734 |
+ valid_state = self.get_result(kwargs['validity_future'], True) |
735 |
# check if there are unused local USE-descriptions in metadata.xml |
736 |
# (unless there are any invalids, to avoid noise) |
737 |
if valid_state: |
738 |
@@ -37,7 +34,7 @@ class UnusedCheck(ScanBase): |
739 |
"metadata.warning", |
740 |
"%s/metadata.xml: unused local USE-description: '%s'" |
741 |
% (xpkg, myflag)) |
742 |
- return {'continue': False} |
743 |
+ return False |
744 |
|
745 |
@property |
746 |
def runInFinal(self): |
747 |
|
748 |
diff --git a/pym/repoman/modules/scan/mirrors/thirdpartymirrors.py b/pym/repoman/modules/scan/mirrors/thirdpartymirrors.py |
749 |
index f467ea4..8e3d250 100644 |
750 |
--- a/pym/repoman/modules/scan/mirrors/thirdpartymirrors.py |
751 |
+++ b/pym/repoman/modules/scan/mirrors/thirdpartymirrors.py |
752 |
@@ -33,9 +33,9 @@ class ThirdPartyMirrors(ScanBase): |
753 |
@param src_uri_error: boolean |
754 |
@returns: dictionary |
755 |
''' |
756 |
- ebuild = kwargs.get('ebuild') |
757 |
- if kwargs.get('src_uri_error'): |
758 |
- return {'continue': True} |
759 |
+ ebuild = kwargs.get('ebuild').result() |
760 |
+ if self.get_result(kwargs.get('src_uri_error'), False): |
761 |
+ return True |
762 |
for uri in portage.dep.use_reduce( |
763 |
ebuild.metadata["SRC_URI"], matchall=True, is_src_uri=True, |
764 |
eapi=ebuild.eapi, flat=True): |
765 |
@@ -52,7 +52,7 @@ class ThirdPartyMirrors(ScanBase): |
766 |
"SRC_URI.mirror", |
767 |
"%s: '%s' found in thirdpartymirrors, use '%s'" % ( |
768 |
ebuild.relative_path, mirror, new_uri)) |
769 |
- return {'continue': False} |
770 |
+ return False |
771 |
|
772 |
@property |
773 |
def runInEbuilds(self): |
774 |
|
775 |
diff --git a/pym/repoman/modules/scan/options/options.py b/pym/repoman/modules/scan/options/options.py |
776 |
index 2fabdba..443f01b 100644 |
777 |
--- a/pym/repoman/modules/scan/options/options.py |
778 |
+++ b/pym/repoman/modules/scan/options/options.py |
779 |
@@ -20,8 +20,8 @@ class Options(ScanBase): |
780 |
# The dep_check() calls are the most expensive QA test. If --force |
781 |
# is enabled, there's no point in wasting time on these since the |
782 |
# user is intent on forcing the commit anyway. |
783 |
- return {'continue': True} |
784 |
- return {'continue': False} |
785 |
+ return True |
786 |
+ return False |
787 |
|
788 |
@property |
789 |
def runInEbuilds(self): |
790 |
|
791 |
diff --git a/pym/repoman/modules/scan/scanbase.py b/pym/repoman/modules/scan/scanbase.py |
792 |
index 9821c57..740092e 100644 |
793 |
--- a/pym/repoman/modules/scan/scanbase.py |
794 |
+++ b/pym/repoman/modules/scan/scanbase.py |
795 |
@@ -1,5 +1,7 @@ |
796 |
# -*- coding:utf-8 -*- |
797 |
|
798 |
+from portage.util.futures import InvalidStateError |
799 |
+ |
800 |
|
801 |
class ScanBase(object): |
802 |
'''Skeleton class for performing a scan for one or more items |
803 |
@@ -30,9 +32,43 @@ class ScanBase(object): |
804 |
# The continue attribute will default to False if not returned. |
805 |
# This will allow the loop to continue with the next check in the list. |
806 |
# Include any additional dynamic data that needs to be added or updated. |
807 |
- return {'continue': False} |
808 |
+ return False # used as a continue True/False value |
809 |
""" |
810 |
|
811 |
+ @staticmethod |
812 |
+ def set_result_pass(items): |
813 |
+ '''Set Future instance results, pass on InvalidStateError |
814 |
+ |
815 |
+ @param items: iterable of key, value tuples |
816 |
+ ''' |
817 |
+ for key, value in items: |
818 |
+ try: |
819 |
+ key.set_result(value) |
820 |
+ except InvalidStateError: |
821 |
+ pass |
822 |
+ |
823 |
+ @staticmethod |
824 |
+ def set_result_raise(items): |
825 |
+ '''Set Future instance results, raises an exception on InvalidStateError |
826 |
+ |
827 |
+ @param items: iterable of key, value tuples |
828 |
+ ''' |
829 |
+ for key, value in items: |
830 |
+ key.set_result(value) |
831 |
+ |
832 |
+ def get_result(self, future, unset_value=None): |
833 |
+ '''Returns a Future result, or the unset value passed in |
834 |
+ |
835 |
+ @param future: The Future instance being queried |
836 |
+ @param unset_value: |
837 |
+ @returns: Future result |
838 |
+ ''' |
839 |
+ try: |
840 |
+ result = future.result() |
841 |
+ except InvalidStateError: |
842 |
+ result = unset_value |
843 |
+ return result |
844 |
+ |
845 |
@property |
846 |
def runInPkgs(self): |
847 |
'''Package level scans''' |
848 |
|
849 |
diff --git a/pym/repoman/modules/scan/status/vcsstatus.py b/pym/repoman/modules/scan/status/vcsstatus.py |
850 |
index cf2298e..cadc5c0 100644 |
851 |
--- a/pym/repoman/modules/scan/status/vcsstatus.py |
852 |
+++ b/pym/repoman/modules/scan/status/vcsstatus.py |
853 |
@@ -31,7 +31,11 @@ class VCSStatus(ScanBase): |
854 |
xpkg = kwargs.get('xpkg') |
855 |
if self.check_not_added: |
856 |
self.vcs_settings.status.check(checkdir, checkdir_relative, xpkg) |
857 |
- return {'continue': False, 'eadded': self.vcs_settings.status.eadded} |
858 |
+ # update the dynamic data |
859 |
+ self.set_result_pass([ |
860 |
+ (kwargs.get('eadded'), self.vcs_settings.status.eadded), |
861 |
+ ]) |
862 |
+ return False |
863 |
|
864 |
@property |
865 |
def runInPkgs(self): |
866 |
|
867 |
diff --git a/pym/repoman/modules/scan/use/use_flags.py b/pym/repoman/modules/scan/use/use_flags.py |
868 |
index b76ed70..70f7583 100644 |
869 |
--- a/pym/repoman/modules/scan/use/use_flags.py |
870 |
+++ b/pym/repoman/modules/scan/use/use_flags.py |
871 |
@@ -38,11 +38,11 @@ class USEFlagChecks(ScanBase): |
872 |
@param muselist: Local USE flags of the package |
873 |
@returns: dictionary, including {ebuild_UsedUseFlags, used_useflags} |
874 |
''' |
875 |
- pkg = kwargs.get('pkg') |
876 |
+ pkg = kwargs.get('pkg').result() |
877 |
package = kwargs.get('xpkg') |
878 |
- ebuild = kwargs.get('ebuild') |
879 |
+ ebuild = kwargs.get('ebuild').result() |
880 |
y_ebuild = kwargs.get('y_ebuild') |
881 |
- localUseFlags = kwargs.get('muselist') |
882 |
+ localUseFlags = kwargs.get('muselist').result() |
883 |
# reset state variables for the run |
884 |
self.useFlags = [] |
885 |
self.defaultUseFlags = [] |
886 |
@@ -50,9 +50,14 @@ class USEFlagChecks(ScanBase): |
887 |
self._checkGlobal(pkg) |
888 |
self._checkMetadata(package, ebuild, y_ebuild, localUseFlags) |
889 |
self._checkRequiredUSE(pkg, ebuild) |
890 |
+ # update the dynamic data |
891 |
used_useflags = kwargs.get('used_useflags').union(self.usedUseFlags) |
892 |
- return {'continue': False, 'ebuild_UsedUseFlags': self.usedUseFlags, |
893 |
- 'used_useflags': used_useflags} |
894 |
+ dyn_ebuild_used = kwargs.get('ebuild_UsedUseFlags') |
895 |
+ dyn_ebuild_used.update(self.usedUseFlags) |
896 |
+ dyn_used = kwargs.get('used_useflags') |
897 |
+ dyn_used.update(used_useflags) |
898 |
+ return False |
899 |
+ |
900 |
|
901 |
def _checkGlobal(self, pkg): |
902 |
for myflag in pkg._metadata["IUSE"].split(): |
903 |
|
904 |
diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py |
905 |
index 5ac519e..3d2c69c 100644 |
906 |
--- a/pym/repoman/scanner.py |
907 |
+++ b/pym/repoman/scanner.py |
908 |
@@ -28,6 +28,8 @@ MODULE_NAMES = MODULE_CONTROLLER.module_names[:] |
909 |
# initial development debug info |
910 |
logging.debug("module_names: %s", MODULE_NAMES) |
911 |
|
912 |
+DATA_TYPES = {'dict': dict, 'Future': Future, 'list': list, 'set': set} |
913 |
+ |
914 |
|
915 |
class Scanner(object): |
916 |
'''Primary scan class. Operates all the small Q/A tests and checks''' |
917 |
@@ -177,6 +179,9 @@ class Scanner(object): |
918 |
chain(self.changed.changed, self.changed.new, self.changed.removed), |
919 |
self.repolevel, self.reposplit, self.categories)) |
920 |
|
921 |
+ self.pkgs = None |
922 |
+ self.eadded = False |
923 |
+ |
924 |
# Create our kwargs dict here to initialize the plugins with |
925 |
self.kwargs = { |
926 |
"repo_settings": self.repo_settings, |
927 |
@@ -215,6 +220,28 @@ class Scanner(object): |
928 |
kwargs[key] = self.kwargs[key] |
929 |
return kwargs |
930 |
|
931 |
+ @staticmethod |
932 |
+ def set_func_kwargs(mod, dynamic_data=None): |
933 |
+ '''Updates the dynamic_data dictionary with any new key, value pairs. |
934 |
+ Creates a limited set of kwargs to pass to the modulefunctions to run |
935 |
+ |
936 |
+ @param mod: module name string |
937 |
+ @param dynamic_data: dictionary structure |
938 |
+ @returns: dictionary |
939 |
+ ''' |
940 |
+ func_kwargs = MODULE_CONTROLLER.modules[mod]['func_kwargs'] |
941 |
+ # determine new keys |
942 |
+ required = set(func_kwargs.viewkeys()) |
943 |
+ exist = set(dynamic_data.viewkeys()) |
944 |
+ new = exist.difference(required) |
945 |
+ # update dynamic_data with initialized entries |
946 |
+ for key in new: |
947 |
+ dynamic_data[key] = DATA_TYPES[func_kwargs['key']]() |
948 |
+ kwargs = {} |
949 |
+ for key in required: |
950 |
+ kwargs[key] = dynamic_data[key] |
951 |
+ return kwargs |
952 |
+ |
953 |
def scan_pkgs(self, can_force): |
954 |
for xpkg in self.effective_scanlist: |
955 |
xpkg_continue = False |
956 |
@@ -252,8 +279,8 @@ class Scanner(object): |
957 |
do_it, functions = self.modules[mod].runInPkgs |
958 |
if do_it: |
959 |
for func in functions: |
960 |
- rdata = func(**dynamic_data) |
961 |
- if rdata.get('continue', False): |
962 |
+ _continue = func(**self.set_func_kwargs(mod, dynamic_data)) |
963 |
+ if _continue: |
964 |
# If we can't access all the metadata then it's totally unsafe to |
965 |
# commit since there's no way to generate a correct Manifest. |
966 |
# Do not try to do any more QA checks on this package since missing |
967 |
@@ -261,7 +288,6 @@ class Scanner(object): |
968 |
# positives confuse users. |
969 |
xpkg_continue = True |
970 |
break |
971 |
- dynamic_data.update(rdata) |
972 |
|
973 |
if xpkg_continue: |
974 |
continue |
975 |
@@ -313,8 +339,8 @@ class Scanner(object): |
976 |
if do_it: |
977 |
for func in functions: |
978 |
logging.debug("\tRunning function: %s", func) |
979 |
- rdata = func(**dynamic_data) |
980 |
- if rdata.get('continue', False): |
981 |
+ _continue = func(**self.set_func_kwargs(mod, dynamic_data)) |
982 |
+ if _continue: |
983 |
# If we can't access all the metadata then it's totally unsafe to |
984 |
# commit since there's no way to generate a correct Manifest. |
985 |
# Do not try to do any more QA checks on this package since missing |
986 |
@@ -323,9 +349,6 @@ class Scanner(object): |
987 |
y_ebuild_continue = True |
988 |
# logging.debug("\t>>> Continuing") |
989 |
break |
990 |
- # logging.debug("rdata: %s", rdata) |
991 |
- dynamic_data.update(rdata) |
992 |
- # logging.debug("dynamic_data: %s", dynamic_data) |
993 |
|
994 |
if y_ebuild_continue: |
995 |
continue |
996 |
@@ -347,14 +370,11 @@ class Scanner(object): |
997 |
if do_it: |
998 |
for func in functions: |
999 |
logging.debug("\tRunning function: %s", func) |
1000 |
- rdata = func(**dynamic_data) |
1001 |
- if rdata.get('continue', False): |
1002 |
+ _continue = func(**self.set_func_kwargs(mod, dynamic_data)) |
1003 |
+ if _continue: |
1004 |
xpkg_complete = True |
1005 |
# logging.debug("\t>>> Continuing") |
1006 |
break |
1007 |
- # logging.debug("rdata: %s", rdata) |
1008 |
- dynamic_data.update(rdata) |
1009 |
- # logging.debug("dynamic_data: %s", dynamic_data) |
1010 |
|
1011 |
if xpkg_complete: |
1012 |
return |