1 |
commit: 89a452505ce089a44f389e924fca233a1d0dc2fe |
2 |
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
3 |
AuthorDate: Thu Apr 28 04:44:55 2016 +0000 |
4 |
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Apr 28 14:50:41 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=89a45250 |
7 |
|
8 |
repoman: Merge USEFlagChecks and UnusedCheck into PkgMetadata class |
9 |
|
10 |
This eliminates muselist and used_useflags from dynamic_data. |
11 |
|
12 |
pym/repoman/modules/scan/metadata/__init__.py | 25 +++--------- |
13 |
pym/repoman/modules/scan/metadata/pkgmetadata.py | 44 ++++++++++++++++++---- |
14 |
pym/repoman/modules/scan/metadata/unused.py | 40 -------------------- |
15 |
.../modules/scan/{use => metadata}/use_flags.py | 23 +++-------- |
16 |
pym/repoman/modules/scan/scanbase.py | 2 +- |
17 |
pym/repoman/modules/scan/use/__init__.py | 34 ----------------- |
18 |
pym/repoman/scanner.py | 8 ++-- |
19 |
7 files changed, 52 insertions(+), 124 deletions(-) |
20 |
|
21 |
diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py |
22 |
index c297676..b090d6b 100644 |
23 |
--- a/pym/repoman/modules/scan/metadata/__init__.py |
24 |
+++ b/pym/repoman/modules/scan/metadata/__init__.py |
25 |
@@ -18,14 +18,18 @@ module_spec = { |
26 |
'functions': ['check'], |
27 |
'func_desc': { |
28 |
}, |
29 |
- 'mod_kwargs': ['repo_settings', 'qatracker', 'options', 'metadata_xsd', |
30 |
+ 'mod_kwargs': ['repo_settings', 'qatracker', 'options', |
31 |
+ 'metadata_xsd', 'uselist', |
32 |
], |
33 |
'func_kwargs': { |
34 |
'checkdir': (None, None), |
35 |
'checkdirlist': (None, None), |
36 |
- 'muselist': ('Future', 'set'), |
37 |
+ 'ebuild': (None, None), |
38 |
+ 'pkg': (None, None), |
39 |
'repolevel': (None, None), |
40 |
+ 'validity_future': (None, None), |
41 |
'xpkg': (None, None), |
42 |
+ 'y_ebuild': (None, None), |
43 |
}, |
44 |
}, |
45 |
'ebuild-metadata': { |
46 |
@@ -77,23 +81,6 @@ module_spec = { |
47 |
'y_ebuild': (None, None), |
48 |
}, |
49 |
}, |
50 |
- 'unused-metadata': { |
51 |
- 'name': "unused", |
52 |
- 'sourcefile': "unused", |
53 |
- 'class': "UnusedCheck", |
54 |
- 'description': doc, |
55 |
- 'functions': ['check'], |
56 |
- 'func_desc': { |
57 |
- }, |
58 |
- 'mod_kwargs': ['qatracker', |
59 |
- ], |
60 |
- 'func_kwargs': { |
61 |
- 'muselist': (None, None), |
62 |
- 'used_useflags': (None, None), |
63 |
- 'validity_future': (None, None), |
64 |
- 'xpkg': (None, None), |
65 |
- }, |
66 |
- }, |
67 |
} |
68 |
} |
69 |
|
70 |
|
71 |
diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py b/pym/repoman/modules/scan/metadata/pkgmetadata.py |
72 |
index 25907b3..5c6452a 100644 |
73 |
--- a/pym/repoman/modules/scan/metadata/pkgmetadata.py |
74 |
+++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py |
75 |
@@ -36,8 +36,10 @@ from portage import os |
76 |
from portage import _encodings, _unicode_encode |
77 |
from portage.dep import Atom |
78 |
|
79 |
+from .use_flags import USEFlagChecks |
80 |
|
81 |
-class PkgMetadata(ScanBase): |
82 |
+ |
83 |
+class PkgMetadata(ScanBase, USEFlagChecks): |
84 |
'''Package metadata.xml checks''' |
85 |
|
86 |
def __init__(self, **kwargs): |
87 |
@@ -53,8 +55,10 @@ class PkgMetadata(ScanBase): |
88 |
self.qatracker = kwargs.get('qatracker') |
89 |
self.options = kwargs.get('options') |
90 |
metadata_xsd = kwargs.get('metadata_xsd') |
91 |
+ self.globalUseFlags = kwargs.get('uselist') |
92 |
self.repoman_settings = repo_settings.repoman_settings |
93 |
self.musedict = {} |
94 |
+ self.muselist = set() |
95 |
self.xmllint = XmlLint(self.options, self.repoman_settings, |
96 |
metadata_xsd=metadata_xsd) |
97 |
|
98 |
@@ -64,7 +68,7 @@ class PkgMetadata(ScanBase): |
99 |
@param checkdir: string, directory path |
100 |
@param checkdirlist: list of checkdir's |
101 |
@param repolevel: integer |
102 |
- @returns: dictionary, including {muselist} |
103 |
+ @returns: boolean |
104 |
''' |
105 |
xpkg = kwargs.get('xpkg') |
106 |
checkdir = kwargs.get('checkdir') |
107 |
@@ -73,9 +77,7 @@ class PkgMetadata(ScanBase): |
108 |
|
109 |
self.musedict = {} |
110 |
if self.options.mode in ['manifest']: |
111 |
- # update the dynamic data |
112 |
- dyn_muselist = kwargs.get('muselist') |
113 |
- dyn_muselist.set(frozenset(self.musedict)) |
114 |
+ self.muselist = frozenset(self.musedict) |
115 |
return False |
116 |
|
117 |
# metadata.xml file check |
118 |
@@ -187,12 +189,38 @@ class PkgMetadata(ScanBase): |
119 |
if not self.xmllint.check(checkdir, repolevel): |
120 |
self.qatracker.add_error("metadata.bad", xpkg + "/metadata.xml") |
121 |
del metadata_bad |
122 |
- # update the dynamic data |
123 |
- dyn_muselist = kwargs.get('muselist') |
124 |
- dyn_muselist.set(frozenset(self.musedict)) |
125 |
+ self.muselist = frozenset(self.musedict) |
126 |
+ return False |
127 |
+ |
128 |
+ def check_unused(self, **kwargs): |
129 |
+ '''Reports on any unused metadata.xml use descriptions |
130 |
+ |
131 |
+ @param xpkg: the pacakge being checked |
132 |
+ @param used_useflags: use flag list |
133 |
+ @param validity_future: Future instance |
134 |
+ ''' |
135 |
+ xpkg = kwargs.get('xpkg') |
136 |
+ valid_state = kwargs.get('validity_future').get() |
137 |
+ # check if there are unused local USE-descriptions in metadata.xml |
138 |
+ # (unless there are any invalids, to avoid noise) |
139 |
+ if valid_state: |
140 |
+ for myflag in self.muselist.difference(self.usedUseFlags): |
141 |
+ self.qatracker.add_error( |
142 |
+ "metadata.warning", |
143 |
+ "%s/metadata.xml: unused local USE-description: '%s'" |
144 |
+ % (xpkg, myflag)) |
145 |
return False |
146 |
|
147 |
@property |
148 |
def runInPkgs(self): |
149 |
'''Package level scans''' |
150 |
return (True, [self.check]) |
151 |
+ |
152 |
+ @property |
153 |
+ def runInEbuilds(self): |
154 |
+ return (True, [self.check_useflags]) |
155 |
+ |
156 |
+ @property |
157 |
+ def runInFinal(self): |
158 |
+ '''Final scans at the package level''' |
159 |
+ return (True, [self.check_unused]) |
160 |
|
161 |
diff --git a/pym/repoman/modules/scan/metadata/unused.py b/pym/repoman/modules/scan/metadata/unused.py |
162 |
deleted file mode 100644 |
163 |
index 7733847..0000000 |
164 |
--- a/pym/repoman/modules/scan/metadata/unused.py |
165 |
+++ /dev/null |
166 |
@@ -1,40 +0,0 @@ |
167 |
- |
168 |
-from repoman.modules.scan.scanbase import ScanBase |
169 |
- |
170 |
- |
171 |
-class UnusedCheck(ScanBase): |
172 |
- '''Checks and reports any un-used metadata.xml use flag descriptions''' |
173 |
- |
174 |
- def __init__(self, **kwargs): |
175 |
- '''UnusedCheck init function |
176 |
- |
177 |
- @param qatracker: QATracker instance |
178 |
- ''' |
179 |
- self.qatracker = kwargs.get('qatracker') |
180 |
- |
181 |
- def check(self, **kwargs): |
182 |
- '''Reports on any unused metadata.xml use descriptions |
183 |
- |
184 |
- @param xpkg: the pacakge being checked |
185 |
- @param muselist: use flag list |
186 |
- @param used_useflags: use flag list |
187 |
- @param validity_future: Future instance |
188 |
- ''' |
189 |
- xpkg = kwargs.get('xpkg') |
190 |
- muselist = kwargs.get('muselist').get() |
191 |
- used_useflags = kwargs.get('used_useflags') |
192 |
- valid_state = kwargs.get('validity_future').get() |
193 |
- # check if there are unused local USE-descriptions in metadata.xml |
194 |
- # (unless there are any invalids, to avoid noise) |
195 |
- if valid_state: |
196 |
- for myflag in muselist.difference(used_useflags): |
197 |
- self.qatracker.add_error( |
198 |
- "metadata.warning", |
199 |
- "%s/metadata.xml: unused local USE-description: '%s'" |
200 |
- % (xpkg, myflag)) |
201 |
- return False |
202 |
- |
203 |
- @property |
204 |
- def runInFinal(self): |
205 |
- '''Final scans at the package level''' |
206 |
- return (True, [self.check]) |
207 |
|
208 |
diff --git a/pym/repoman/modules/scan/use/use_flags.py b/pym/repoman/modules/scan/metadata/use_flags.py |
209 |
similarity index 81% |
210 |
rename from pym/repoman/modules/scan/use/use_flags.py |
211 |
rename to pym/repoman/modules/scan/metadata/use_flags.py |
212 |
index ae8cd0d..1738fd2 100644 |
213 |
--- a/pym/repoman/modules/scan/use/use_flags.py |
214 |
+++ b/pym/repoman/modules/scan/metadata/use_flags.py |
215 |
@@ -9,10 +9,9 @@ from repoman._portage import portage |
216 |
|
217 |
from portage import eapi |
218 |
from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use |
219 |
-from repoman.modules.scan.scanbase import ScanBase |
220 |
|
221 |
|
222 |
-class USEFlagChecks(ScanBase): |
223 |
+class USEFlagChecks(object): |
224 |
'''Performs checks on USE flags listed in the ebuilds and metadata.xml''' |
225 |
|
226 |
def __init__(self, **kwargs): |
227 |
@@ -21,38 +20,33 @@ class USEFlagChecks(ScanBase): |
228 |
@param qatracker: QATracker instance |
229 |
@param globalUseFlags: Global USE flags |
230 |
''' |
231 |
- super(USEFlagChecks, self).__init__(**kwargs) |
232 |
- self.qatracker = kwargs.get('qatracker') |
233 |
- self.globalUseFlags = kwargs.get('uselist') |
234 |
+ super(USEFlagChecks, self).__init__() |
235 |
+ self.qatracker = None |
236 |
+ self.globalUseFlags = None |
237 |
self.useFlags = [] |
238 |
self.defaultUseFlags = [] |
239 |
self.usedUseFlags = set() |
240 |
|
241 |
- def check(self, **kwargs): |
242 |
+ def check_useflags(self, **kwargs): |
243 |
'''Perform the check. |
244 |
|
245 |
@param pkg: Package in which we check (object). |
246 |
@param xpkg: Package in which we check (string). |
247 |
@param ebuild: Ebuild which we check (object). |
248 |
@param y_ebuild: Ebuild which we check (string). |
249 |
- @param muselist: Local USE flags of the package |
250 |
@returns: dictionary, including {ebuild_UsedUseFlags, used_useflags} |
251 |
''' |
252 |
pkg = kwargs.get('pkg').get() |
253 |
package = kwargs.get('xpkg') |
254 |
ebuild = kwargs.get('ebuild').get() |
255 |
y_ebuild = kwargs.get('y_ebuild') |
256 |
- localUseFlags = kwargs.get('muselist').get() |
257 |
- dyn_used = kwargs.get('used_useflags') |
258 |
# reset state variables for the run |
259 |
self.useFlags = [] |
260 |
self.defaultUseFlags = [] |
261 |
- self.usedUseFlags = set() |
262 |
# perform the checks |
263 |
self._checkGlobal(pkg) |
264 |
- self._checkMetadata(package, ebuild, y_ebuild, localUseFlags) |
265 |
+ self._checkMetadata(package, ebuild, y_ebuild, self.muselist) |
266 |
self._checkRequiredUSE(pkg, ebuild) |
267 |
- dyn_used.update(self.usedUseFlags) |
268 |
return False |
269 |
|
270 |
|
271 |
@@ -98,8 +92,3 @@ class USEFlagChecks(ScanBase): |
272 |
"REQUIRED_USE.syntax", |
273 |
"%s: REQUIRED_USE: %s" % (ebuild.relative_path, e)) |
274 |
del e |
275 |
- |
276 |
- @property |
277 |
- def runInEbuilds(self): |
278 |
- '''Ebuild level scans''' |
279 |
- return (True, [self.check]) |
280 |
|
281 |
diff --git a/pym/repoman/modules/scan/scanbase.py b/pym/repoman/modules/scan/scanbase.py |
282 |
index e5160d2..aea1bb1 100644 |
283 |
--- a/pym/repoman/modules/scan/scanbase.py |
284 |
+++ b/pym/repoman/modules/scan/scanbase.py |
285 |
@@ -13,7 +13,7 @@ class ScanBase(object): |
286 |
''' |
287 |
# Since no two checks are identicle as to what kwargs are needed, |
288 |
# this does not define any from it here. |
289 |
- pass |
290 |
+ super(ScanBase, self).__init__() |
291 |
|
292 |
""" # sample check |
293 |
def check_foo(self, **kwargs): |
294 |
|
295 |
diff --git a/pym/repoman/modules/scan/use/__init__.py b/pym/repoman/modules/scan/use/__init__.py |
296 |
deleted file mode 100644 |
297 |
index 32da5d9..0000000 |
298 |
--- a/pym/repoman/modules/scan/use/__init__.py |
299 |
+++ /dev/null |
300 |
@@ -1,34 +0,0 @@ |
301 |
-# Copyright 2015-2016 Gentoo Foundation |
302 |
-# Distributed under the terms of the GNU General Public License v2 |
303 |
- |
304 |
-doc = """Use plug-in module for repoman. |
305 |
-Performs use flag checks on ebuilds.""" |
306 |
-__doc__ = doc[:] |
307 |
- |
308 |
- |
309 |
-module_spec = { |
310 |
- 'name': 'use', |
311 |
- 'description': doc, |
312 |
- 'provides':{ |
313 |
- 'use-module': { |
314 |
- 'name': "use_flags", |
315 |
- 'sourcefile': "use_flags", |
316 |
- 'class': "USEFlagChecks", |
317 |
- 'description': doc, |
318 |
- 'functions': ['check', 'getUsedUseFlags'], |
319 |
- 'func_desc': { |
320 |
- }, |
321 |
- 'mod_kwargs': ['qatracker', 'uselist', |
322 |
- ], |
323 |
- 'func_kwargs': { |
324 |
- 'ebuild': (None, None), |
325 |
- 'muselist': (None, None), |
326 |
- 'pkg': (None, None), |
327 |
- 'used_useflags': (None, None), |
328 |
- 'xpkg': (None, None), |
329 |
- 'y_ebuild': (None, None), |
330 |
- }, |
331 |
- }, |
332 |
- } |
333 |
-} |
334 |
- |
335 |
|
336 |
diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py |
337 |
index e5e5717..e383c8d 100644 |
338 |
--- a/pym/repoman/scanner.py |
339 |
+++ b/pym/repoman/scanner.py |
340 |
@@ -358,8 +358,6 @@ class Scanner(object): |
341 |
|
342 |
|
343 |
def _scan_ebuilds(self, ebuildlist, dynamic_data): |
344 |
- # detect unused local USE-descriptions |
345 |
- dynamic_data['used_useflags'] = set() |
346 |
|
347 |
for y_ebuild in ebuildlist: |
348 |
self.reset_futures(dynamic_data) |
349 |
@@ -373,7 +371,7 @@ class Scanner(object): |
350 |
('fetches', 'FetchChecks'), |
351 |
('description', 'DescriptionChecks'), |
352 |
('keywords', 'KeywordChecks'), |
353 |
- ('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'), |
354 |
+ ('pkgmetadata', 'PkgMetadata'), ('ruby', 'RubyEclassChecks'), |
355 |
('restrict', 'RestrictChecks'), |
356 |
('mtime', 'MtimeChecks'), ('multicheck', 'MultiCheck'), |
357 |
# Options.is_forced() is used to bypass further checks |
358 |
@@ -409,8 +407,8 @@ class Scanner(object): |
359 |
# initialize per pkg plugin final checks here |
360 |
# need to set it up for ==> self.modules_list or some other ordered list |
361 |
xpkg_complete = False |
362 |
- for mod in [('unused', 'UnusedChecks')]: |
363 |
- if mod[0]: |
364 |
+ for mod in [('pkgmetadata', 'PkgMetadata')]: |
365 |
+ if mod[0] and mod[1] not in self.modules: |
366 |
mod_class = MODULE_CONTROLLER.get_class(mod[0]) |
367 |
logging.debug("Initializing class name: %s", mod_class.__name__) |
368 |
self.modules[mod[1]] = mod_class(**self.set_kwargs(mod[0])) |