Gentoo Archives: gentoo-commits

From: Brian Dolbec <dolsen@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/use/, pym/repoman/, pym/repoman/modules/scan/metadata/, ...
Date: Thu, 28 Apr 2016 15:05:51
Message-Id: 1461855041.89a452505ce089a44f389e924fca233a1d0dc2fe.dolsen@gentoo
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]))