From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <gentoo-commits+bounces-878840-garchives=archives.gentoo.org@lists.gentoo.org> Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 850FF138206 for <garchives@archives.gentoo.org>; Thu, 28 Apr 2016 15:05:51 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 72D6B21C045; Thu, 28 Apr 2016 15:05:49 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id A7D2321C045 for <gentoo-commits@lists.gentoo.org>; Thu, 28 Apr 2016 15:05:48 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 8A657340CF1 for <gentoo-commits@lists.gentoo.org>; Thu, 28 Apr 2016 15:05:47 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 5D79E335 for <gentoo-commits@lists.gentoo.org>; Thu, 28 Apr 2016 15:05:44 +0000 (UTC) From: "Brian Dolbec" <dolsen@gentoo.org> To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Brian Dolbec" <dolsen@gentoo.org> Message-ID: <1461855041.89a452505ce089a44f389e924fca233a1d0dc2fe.dolsen@gentoo> Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/use/, pym/repoman/, pym/repoman/modules/scan/metadata/, ... X-VCS-Repository: proj/portage X-VCS-Files: pym/repoman/modules/scan/metadata/__init__.py pym/repoman/modules/scan/metadata/pkgmetadata.py pym/repoman/modules/scan/metadata/unused.py pym/repoman/modules/scan/metadata/use_flags.py pym/repoman/modules/scan/scanbase.py pym/repoman/modules/scan/use/__init__.py pym/repoman/modules/scan/use/use_flags.py pym/repoman/scanner.py X-VCS-Directories: pym/repoman/ pym/repoman/modules/scan/metadata/ pym/repoman/modules/scan/use/ pym/repoman/modules/scan/ X-VCS-Committer: dolsen X-VCS-Committer-Name: Brian Dolbec X-VCS-Revision: 89a452505ce089a44f389e924fca233a1d0dc2fe X-VCS-Branch: repoman Date: Thu, 28 Apr 2016 15:05:44 +0000 (UTC) Precedence: bulk List-Post: <mailto:gentoo-commits@lists.gentoo.org> List-Help: <mailto:gentoo-commits+help@lists.gentoo.org> List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org> List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org> List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org> X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 3daf3d94-3e80-4460-8da2-7a944543a1d7 X-Archives-Hash: b06a4f66be578291caf67c8494ca9ba3 commit: 89a452505ce089a44f389e924fca233a1d0dc2fe Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> AuthorDate: Thu Apr 28 04:44:55 2016 +0000 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> CommitDate: Thu Apr 28 14:50:41 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=89a45250 repoman: Merge USEFlagChecks and UnusedCheck into PkgMetadata class This eliminates muselist and used_useflags from dynamic_data. pym/repoman/modules/scan/metadata/__init__.py | 25 +++--------- pym/repoman/modules/scan/metadata/pkgmetadata.py | 44 ++++++++++++++++++---- pym/repoman/modules/scan/metadata/unused.py | 40 -------------------- .../modules/scan/{use => metadata}/use_flags.py | 23 +++-------- pym/repoman/modules/scan/scanbase.py | 2 +- pym/repoman/modules/scan/use/__init__.py | 34 ----------------- pym/repoman/scanner.py | 8 ++-- 7 files changed, 52 insertions(+), 124 deletions(-) diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py index c297676..b090d6b 100644 --- a/pym/repoman/modules/scan/metadata/__init__.py +++ b/pym/repoman/modules/scan/metadata/__init__.py @@ -18,14 +18,18 @@ module_spec = { 'functions': ['check'], 'func_desc': { }, - 'mod_kwargs': ['repo_settings', 'qatracker', 'options', 'metadata_xsd', + 'mod_kwargs': ['repo_settings', 'qatracker', 'options', + 'metadata_xsd', 'uselist', ], 'func_kwargs': { 'checkdir': (None, None), 'checkdirlist': (None, None), - 'muselist': ('Future', 'set'), + 'ebuild': (None, None), + 'pkg': (None, None), 'repolevel': (None, None), + 'validity_future': (None, None), 'xpkg': (None, None), + 'y_ebuild': (None, None), }, }, 'ebuild-metadata': { @@ -77,23 +81,6 @@ module_spec = { 'y_ebuild': (None, None), }, }, - 'unused-metadata': { - 'name': "unused", - 'sourcefile': "unused", - 'class': "UnusedCheck", - 'description': doc, - 'functions': ['check'], - 'func_desc': { - }, - 'mod_kwargs': ['qatracker', - ], - 'func_kwargs': { - 'muselist': (None, None), - 'used_useflags': (None, None), - 'validity_future': (None, None), - 'xpkg': (None, None), - }, - }, } } diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py b/pym/repoman/modules/scan/metadata/pkgmetadata.py index 25907b3..5c6452a 100644 --- a/pym/repoman/modules/scan/metadata/pkgmetadata.py +++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py @@ -36,8 +36,10 @@ from portage import os from portage import _encodings, _unicode_encode from portage.dep import Atom +from .use_flags import USEFlagChecks -class PkgMetadata(ScanBase): + +class PkgMetadata(ScanBase, USEFlagChecks): '''Package metadata.xml checks''' def __init__(self, **kwargs): @@ -53,8 +55,10 @@ class PkgMetadata(ScanBase): self.qatracker = kwargs.get('qatracker') self.options = kwargs.get('options') metadata_xsd = kwargs.get('metadata_xsd') + self.globalUseFlags = kwargs.get('uselist') self.repoman_settings = repo_settings.repoman_settings self.musedict = {} + self.muselist = set() self.xmllint = XmlLint(self.options, self.repoman_settings, metadata_xsd=metadata_xsd) @@ -64,7 +68,7 @@ class PkgMetadata(ScanBase): @param checkdir: string, directory path @param checkdirlist: list of checkdir's @param repolevel: integer - @returns: dictionary, including {muselist} + @returns: boolean ''' xpkg = kwargs.get('xpkg') checkdir = kwargs.get('checkdir') @@ -73,9 +77,7 @@ class PkgMetadata(ScanBase): self.musedict = {} if self.options.mode in ['manifest']: - # update the dynamic data - dyn_muselist = kwargs.get('muselist') - dyn_muselist.set(frozenset(self.musedict)) + self.muselist = frozenset(self.musedict) return False # metadata.xml file check @@ -187,12 +189,38 @@ class PkgMetadata(ScanBase): if not self.xmllint.check(checkdir, repolevel): self.qatracker.add_error("metadata.bad", xpkg + "/metadata.xml") del metadata_bad - # update the dynamic data - dyn_muselist = kwargs.get('muselist') - dyn_muselist.set(frozenset(self.musedict)) + self.muselist = frozenset(self.musedict) + return False + + def check_unused(self, **kwargs): + '''Reports on any unused metadata.xml use descriptions + + @param xpkg: the pacakge being checked + @param used_useflags: use flag list + @param validity_future: Future instance + ''' + xpkg = kwargs.get('xpkg') + valid_state = kwargs.get('validity_future').get() + # check if there are unused local USE-descriptions in metadata.xml + # (unless there are any invalids, to avoid noise) + if valid_state: + for myflag in self.muselist.difference(self.usedUseFlags): + self.qatracker.add_error( + "metadata.warning", + "%s/metadata.xml: unused local USE-description: '%s'" + % (xpkg, myflag)) return False @property def runInPkgs(self): '''Package level scans''' return (True, [self.check]) + + @property + def runInEbuilds(self): + return (True, [self.check_useflags]) + + @property + def runInFinal(self): + '''Final scans at the package level''' + return (True, [self.check_unused]) diff --git a/pym/repoman/modules/scan/metadata/unused.py b/pym/repoman/modules/scan/metadata/unused.py deleted file mode 100644 index 7733847..0000000 --- a/pym/repoman/modules/scan/metadata/unused.py +++ /dev/null @@ -1,40 +0,0 @@ - -from repoman.modules.scan.scanbase import ScanBase - - -class UnusedCheck(ScanBase): - '''Checks and reports any un-used metadata.xml use flag descriptions''' - - def __init__(self, **kwargs): - '''UnusedCheck init function - - @param qatracker: QATracker instance - ''' - self.qatracker = kwargs.get('qatracker') - - def check(self, **kwargs): - '''Reports on any unused metadata.xml use descriptions - - @param xpkg: the pacakge being checked - @param muselist: use flag list - @param used_useflags: use flag list - @param validity_future: Future instance - ''' - xpkg = kwargs.get('xpkg') - muselist = kwargs.get('muselist').get() - used_useflags = kwargs.get('used_useflags') - valid_state = kwargs.get('validity_future').get() - # check if there are unused local USE-descriptions in metadata.xml - # (unless there are any invalids, to avoid noise) - if valid_state: - for myflag in muselist.difference(used_useflags): - self.qatracker.add_error( - "metadata.warning", - "%s/metadata.xml: unused local USE-description: '%s'" - % (xpkg, myflag)) - return False - - @property - def runInFinal(self): - '''Final scans at the package level''' - return (True, [self.check]) diff --git a/pym/repoman/modules/scan/use/use_flags.py b/pym/repoman/modules/scan/metadata/use_flags.py similarity index 81% rename from pym/repoman/modules/scan/use/use_flags.py rename to pym/repoman/modules/scan/metadata/use_flags.py index ae8cd0d..1738fd2 100644 --- a/pym/repoman/modules/scan/use/use_flags.py +++ b/pym/repoman/modules/scan/metadata/use_flags.py @@ -9,10 +9,9 @@ from repoman._portage import portage from portage import eapi from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use -from repoman.modules.scan.scanbase import ScanBase -class USEFlagChecks(ScanBase): +class USEFlagChecks(object): '''Performs checks on USE flags listed in the ebuilds and metadata.xml''' def __init__(self, **kwargs): @@ -21,38 +20,33 @@ class USEFlagChecks(ScanBase): @param qatracker: QATracker instance @param globalUseFlags: Global USE flags ''' - super(USEFlagChecks, self).__init__(**kwargs) - self.qatracker = kwargs.get('qatracker') - self.globalUseFlags = kwargs.get('uselist') + super(USEFlagChecks, self).__init__() + self.qatracker = None + self.globalUseFlags = None self.useFlags = [] self.defaultUseFlags = [] self.usedUseFlags = set() - def check(self, **kwargs): + def check_useflags(self, **kwargs): '''Perform the check. @param pkg: Package in which we check (object). @param xpkg: Package in which we check (string). @param ebuild: Ebuild which we check (object). @param y_ebuild: Ebuild which we check (string). - @param muselist: Local USE flags of the package @returns: dictionary, including {ebuild_UsedUseFlags, used_useflags} ''' pkg = kwargs.get('pkg').get() package = kwargs.get('xpkg') ebuild = kwargs.get('ebuild').get() y_ebuild = kwargs.get('y_ebuild') - localUseFlags = kwargs.get('muselist').get() - dyn_used = kwargs.get('used_useflags') # reset state variables for the run self.useFlags = [] self.defaultUseFlags = [] - self.usedUseFlags = set() # perform the checks self._checkGlobal(pkg) - self._checkMetadata(package, ebuild, y_ebuild, localUseFlags) + self._checkMetadata(package, ebuild, y_ebuild, self.muselist) self._checkRequiredUSE(pkg, ebuild) - dyn_used.update(self.usedUseFlags) return False @@ -98,8 +92,3 @@ class USEFlagChecks(ScanBase): "REQUIRED_USE.syntax", "%s: REQUIRED_USE: %s" % (ebuild.relative_path, e)) del e - - @property - def runInEbuilds(self): - '''Ebuild level scans''' - return (True, [self.check]) diff --git a/pym/repoman/modules/scan/scanbase.py b/pym/repoman/modules/scan/scanbase.py index e5160d2..aea1bb1 100644 --- a/pym/repoman/modules/scan/scanbase.py +++ b/pym/repoman/modules/scan/scanbase.py @@ -13,7 +13,7 @@ class ScanBase(object): ''' # Since no two checks are identicle as to what kwargs are needed, # this does not define any from it here. - pass + super(ScanBase, self).__init__() """ # sample check def check_foo(self, **kwargs): diff --git a/pym/repoman/modules/scan/use/__init__.py b/pym/repoman/modules/scan/use/__init__.py deleted file mode 100644 index 32da5d9..0000000 --- a/pym/repoman/modules/scan/use/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2015-2016 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -doc = """Use plug-in module for repoman. -Performs use flag checks on ebuilds.""" -__doc__ = doc[:] - - -module_spec = { - 'name': 'use', - 'description': doc, - 'provides':{ - 'use-module': { - 'name': "use_flags", - 'sourcefile': "use_flags", - 'class': "USEFlagChecks", - 'description': doc, - 'functions': ['check', 'getUsedUseFlags'], - 'func_desc': { - }, - 'mod_kwargs': ['qatracker', 'uselist', - ], - 'func_kwargs': { - 'ebuild': (None, None), - 'muselist': (None, None), - 'pkg': (None, None), - 'used_useflags': (None, None), - 'xpkg': (None, None), - 'y_ebuild': (None, None), - }, - }, - } -} - diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py index e5e5717..e383c8d 100644 --- a/pym/repoman/scanner.py +++ b/pym/repoman/scanner.py @@ -358,8 +358,6 @@ class Scanner(object): def _scan_ebuilds(self, ebuildlist, dynamic_data): - # detect unused local USE-descriptions - dynamic_data['used_useflags'] = set() for y_ebuild in ebuildlist: self.reset_futures(dynamic_data) @@ -373,7 +371,7 @@ class Scanner(object): ('fetches', 'FetchChecks'), ('description', 'DescriptionChecks'), ('keywords', 'KeywordChecks'), - ('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'), + ('pkgmetadata', 'PkgMetadata'), ('ruby', 'RubyEclassChecks'), ('restrict', 'RestrictChecks'), ('mtime', 'MtimeChecks'), ('multicheck', 'MultiCheck'), # Options.is_forced() is used to bypass further checks @@ -409,8 +407,8 @@ class Scanner(object): # initialize per pkg plugin final checks here # need to set it up for ==> self.modules_list or some other ordered list xpkg_complete = False - for mod in [('unused', 'UnusedChecks')]: - if mod[0]: + for mod in [('pkgmetadata', 'PkgMetadata')]: + if mod[0] and mod[1] not in self.modules: mod_class = MODULE_CONTROLLER.get_class(mod[0]) logging.debug("Initializing class name: %s", mod_class.__name__) self.modules[mod[1]] = mod_class(**self.set_kwargs(mod[0])) From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <gentoo-commits+bounces-879023-garchives=archives.gentoo.org@lists.gentoo.org> Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 3529E138206 for <garchives@archives.gentoo.org>; Fri, 29 Apr 2016 17:25:30 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 5E65321C094; Fri, 29 Apr 2016 17:24:54 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id C5FB821C08A for <gentoo-commits@lists.gentoo.org>; Fri, 29 Apr 2016 17:24:52 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id A038E340D8D for <gentoo-commits@lists.gentoo.org>; Fri, 29 Apr 2016 17:24:50 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 3FA41960 for <gentoo-commits@lists.gentoo.org>; Fri, 29 Apr 2016 17:24:46 +0000 (UTC) From: "Brian Dolbec" <dolsen@gentoo.org> To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Brian Dolbec" <dolsen@gentoo.org> Message-ID: <1461855041.89a452505ce089a44f389e924fca233a1d0dc2fe.dolsen@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/repoman/, pym/repoman/modules/scan/use/, pym/repoman/modules/scan/metadata/, ... X-VCS-Repository: proj/portage X-VCS-Files: pym/repoman/modules/scan/metadata/__init__.py pym/repoman/modules/scan/metadata/pkgmetadata.py pym/repoman/modules/scan/metadata/unused.py pym/repoman/modules/scan/metadata/use_flags.py pym/repoman/modules/scan/scanbase.py pym/repoman/modules/scan/use/__init__.py pym/repoman/modules/scan/use/use_flags.py pym/repoman/scanner.py X-VCS-Directories: pym/repoman/modules/scan/ pym/repoman/modules/scan/metadata/ pym/repoman/ pym/repoman/modules/scan/use/ X-VCS-Committer: dolsen X-VCS-Committer-Name: Brian Dolbec X-VCS-Revision: 89a452505ce089a44f389e924fca233a1d0dc2fe X-VCS-Branch: master Date: Fri, 29 Apr 2016 17:24:46 +0000 (UTC) Precedence: bulk List-Post: <mailto:gentoo-commits@lists.gentoo.org> List-Help: <mailto:gentoo-commits+help@lists.gentoo.org> List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org> List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org> List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org> X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: fa04cfc3-b5a4-48f7-8851-349c50007860 X-Archives-Hash: 0e6c3f9ddc1e0d71dbcd99e33b5e49c7 Message-ID: <20160429172446.vdClVW9ciBvlgc6kiRXTBhazpTwHy3NwJVsHWPQvJ44@z> commit: 89a452505ce089a44f389e924fca233a1d0dc2fe Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> AuthorDate: Thu Apr 28 04:44:55 2016 +0000 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> CommitDate: Thu Apr 28 14:50:41 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=89a45250 repoman: Merge USEFlagChecks and UnusedCheck into PkgMetadata class This eliminates muselist and used_useflags from dynamic_data. pym/repoman/modules/scan/metadata/__init__.py | 25 +++--------- pym/repoman/modules/scan/metadata/pkgmetadata.py | 44 ++++++++++++++++++---- pym/repoman/modules/scan/metadata/unused.py | 40 -------------------- .../modules/scan/{use => metadata}/use_flags.py | 23 +++-------- pym/repoman/modules/scan/scanbase.py | 2 +- pym/repoman/modules/scan/use/__init__.py | 34 ----------------- pym/repoman/scanner.py | 8 ++-- 7 files changed, 52 insertions(+), 124 deletions(-) diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py index c297676..b090d6b 100644 --- a/pym/repoman/modules/scan/metadata/__init__.py +++ b/pym/repoman/modules/scan/metadata/__init__.py @@ -18,14 +18,18 @@ module_spec = { 'functions': ['check'], 'func_desc': { }, - 'mod_kwargs': ['repo_settings', 'qatracker', 'options', 'metadata_xsd', + 'mod_kwargs': ['repo_settings', 'qatracker', 'options', + 'metadata_xsd', 'uselist', ], 'func_kwargs': { 'checkdir': (None, None), 'checkdirlist': (None, None), - 'muselist': ('Future', 'set'), + 'ebuild': (None, None), + 'pkg': (None, None), 'repolevel': (None, None), + 'validity_future': (None, None), 'xpkg': (None, None), + 'y_ebuild': (None, None), }, }, 'ebuild-metadata': { @@ -77,23 +81,6 @@ module_spec = { 'y_ebuild': (None, None), }, }, - 'unused-metadata': { - 'name': "unused", - 'sourcefile': "unused", - 'class': "UnusedCheck", - 'description': doc, - 'functions': ['check'], - 'func_desc': { - }, - 'mod_kwargs': ['qatracker', - ], - 'func_kwargs': { - 'muselist': (None, None), - 'used_useflags': (None, None), - 'validity_future': (None, None), - 'xpkg': (None, None), - }, - }, } } diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py b/pym/repoman/modules/scan/metadata/pkgmetadata.py index 25907b3..5c6452a 100644 --- a/pym/repoman/modules/scan/metadata/pkgmetadata.py +++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py @@ -36,8 +36,10 @@ from portage import os from portage import _encodings, _unicode_encode from portage.dep import Atom +from .use_flags import USEFlagChecks -class PkgMetadata(ScanBase): + +class PkgMetadata(ScanBase, USEFlagChecks): '''Package metadata.xml checks''' def __init__(self, **kwargs): @@ -53,8 +55,10 @@ class PkgMetadata(ScanBase): self.qatracker = kwargs.get('qatracker') self.options = kwargs.get('options') metadata_xsd = kwargs.get('metadata_xsd') + self.globalUseFlags = kwargs.get('uselist') self.repoman_settings = repo_settings.repoman_settings self.musedict = {} + self.muselist = set() self.xmllint = XmlLint(self.options, self.repoman_settings, metadata_xsd=metadata_xsd) @@ -64,7 +68,7 @@ class PkgMetadata(ScanBase): @param checkdir: string, directory path @param checkdirlist: list of checkdir's @param repolevel: integer - @returns: dictionary, including {muselist} + @returns: boolean ''' xpkg = kwargs.get('xpkg') checkdir = kwargs.get('checkdir') @@ -73,9 +77,7 @@ class PkgMetadata(ScanBase): self.musedict = {} if self.options.mode in ['manifest']: - # update the dynamic data - dyn_muselist = kwargs.get('muselist') - dyn_muselist.set(frozenset(self.musedict)) + self.muselist = frozenset(self.musedict) return False # metadata.xml file check @@ -187,12 +189,38 @@ class PkgMetadata(ScanBase): if not self.xmllint.check(checkdir, repolevel): self.qatracker.add_error("metadata.bad", xpkg + "/metadata.xml") del metadata_bad - # update the dynamic data - dyn_muselist = kwargs.get('muselist') - dyn_muselist.set(frozenset(self.musedict)) + self.muselist = frozenset(self.musedict) + return False + + def check_unused(self, **kwargs): + '''Reports on any unused metadata.xml use descriptions + + @param xpkg: the pacakge being checked + @param used_useflags: use flag list + @param validity_future: Future instance + ''' + xpkg = kwargs.get('xpkg') + valid_state = kwargs.get('validity_future').get() + # check if there are unused local USE-descriptions in metadata.xml + # (unless there are any invalids, to avoid noise) + if valid_state: + for myflag in self.muselist.difference(self.usedUseFlags): + self.qatracker.add_error( + "metadata.warning", + "%s/metadata.xml: unused local USE-description: '%s'" + % (xpkg, myflag)) return False @property def runInPkgs(self): '''Package level scans''' return (True, [self.check]) + + @property + def runInEbuilds(self): + return (True, [self.check_useflags]) + + @property + def runInFinal(self): + '''Final scans at the package level''' + return (True, [self.check_unused]) diff --git a/pym/repoman/modules/scan/metadata/unused.py b/pym/repoman/modules/scan/metadata/unused.py deleted file mode 100644 index 7733847..0000000 --- a/pym/repoman/modules/scan/metadata/unused.py +++ /dev/null @@ -1,40 +0,0 @@ - -from repoman.modules.scan.scanbase import ScanBase - - -class UnusedCheck(ScanBase): - '''Checks and reports any un-used metadata.xml use flag descriptions''' - - def __init__(self, **kwargs): - '''UnusedCheck init function - - @param qatracker: QATracker instance - ''' - self.qatracker = kwargs.get('qatracker') - - def check(self, **kwargs): - '''Reports on any unused metadata.xml use descriptions - - @param xpkg: the pacakge being checked - @param muselist: use flag list - @param used_useflags: use flag list - @param validity_future: Future instance - ''' - xpkg = kwargs.get('xpkg') - muselist = kwargs.get('muselist').get() - used_useflags = kwargs.get('used_useflags') - valid_state = kwargs.get('validity_future').get() - # check if there are unused local USE-descriptions in metadata.xml - # (unless there are any invalids, to avoid noise) - if valid_state: - for myflag in muselist.difference(used_useflags): - self.qatracker.add_error( - "metadata.warning", - "%s/metadata.xml: unused local USE-description: '%s'" - % (xpkg, myflag)) - return False - - @property - def runInFinal(self): - '''Final scans at the package level''' - return (True, [self.check]) diff --git a/pym/repoman/modules/scan/use/use_flags.py b/pym/repoman/modules/scan/metadata/use_flags.py similarity index 81% rename from pym/repoman/modules/scan/use/use_flags.py rename to pym/repoman/modules/scan/metadata/use_flags.py index ae8cd0d..1738fd2 100644 --- a/pym/repoman/modules/scan/use/use_flags.py +++ b/pym/repoman/modules/scan/metadata/use_flags.py @@ -9,10 +9,9 @@ from repoman._portage import portage from portage import eapi from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use -from repoman.modules.scan.scanbase import ScanBase -class USEFlagChecks(ScanBase): +class USEFlagChecks(object): '''Performs checks on USE flags listed in the ebuilds and metadata.xml''' def __init__(self, **kwargs): @@ -21,38 +20,33 @@ class USEFlagChecks(ScanBase): @param qatracker: QATracker instance @param globalUseFlags: Global USE flags ''' - super(USEFlagChecks, self).__init__(**kwargs) - self.qatracker = kwargs.get('qatracker') - self.globalUseFlags = kwargs.get('uselist') + super(USEFlagChecks, self).__init__() + self.qatracker = None + self.globalUseFlags = None self.useFlags = [] self.defaultUseFlags = [] self.usedUseFlags = set() - def check(self, **kwargs): + def check_useflags(self, **kwargs): '''Perform the check. @param pkg: Package in which we check (object). @param xpkg: Package in which we check (string). @param ebuild: Ebuild which we check (object). @param y_ebuild: Ebuild which we check (string). - @param muselist: Local USE flags of the package @returns: dictionary, including {ebuild_UsedUseFlags, used_useflags} ''' pkg = kwargs.get('pkg').get() package = kwargs.get('xpkg') ebuild = kwargs.get('ebuild').get() y_ebuild = kwargs.get('y_ebuild') - localUseFlags = kwargs.get('muselist').get() - dyn_used = kwargs.get('used_useflags') # reset state variables for the run self.useFlags = [] self.defaultUseFlags = [] - self.usedUseFlags = set() # perform the checks self._checkGlobal(pkg) - self._checkMetadata(package, ebuild, y_ebuild, localUseFlags) + self._checkMetadata(package, ebuild, y_ebuild, self.muselist) self._checkRequiredUSE(pkg, ebuild) - dyn_used.update(self.usedUseFlags) return False @@ -98,8 +92,3 @@ class USEFlagChecks(ScanBase): "REQUIRED_USE.syntax", "%s: REQUIRED_USE: %s" % (ebuild.relative_path, e)) del e - - @property - def runInEbuilds(self): - '''Ebuild level scans''' - return (True, [self.check]) diff --git a/pym/repoman/modules/scan/scanbase.py b/pym/repoman/modules/scan/scanbase.py index e5160d2..aea1bb1 100644 --- a/pym/repoman/modules/scan/scanbase.py +++ b/pym/repoman/modules/scan/scanbase.py @@ -13,7 +13,7 @@ class ScanBase(object): ''' # Since no two checks are identicle as to what kwargs are needed, # this does not define any from it here. - pass + super(ScanBase, self).__init__() """ # sample check def check_foo(self, **kwargs): diff --git a/pym/repoman/modules/scan/use/__init__.py b/pym/repoman/modules/scan/use/__init__.py deleted file mode 100644 index 32da5d9..0000000 --- a/pym/repoman/modules/scan/use/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2015-2016 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 - -doc = """Use plug-in module for repoman. -Performs use flag checks on ebuilds.""" -__doc__ = doc[:] - - -module_spec = { - 'name': 'use', - 'description': doc, - 'provides':{ - 'use-module': { - 'name': "use_flags", - 'sourcefile': "use_flags", - 'class': "USEFlagChecks", - 'description': doc, - 'functions': ['check', 'getUsedUseFlags'], - 'func_desc': { - }, - 'mod_kwargs': ['qatracker', 'uselist', - ], - 'func_kwargs': { - 'ebuild': (None, None), - 'muselist': (None, None), - 'pkg': (None, None), - 'used_useflags': (None, None), - 'xpkg': (None, None), - 'y_ebuild': (None, None), - }, - }, - } -} - diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py index e5e5717..e383c8d 100644 --- a/pym/repoman/scanner.py +++ b/pym/repoman/scanner.py @@ -358,8 +358,6 @@ class Scanner(object): def _scan_ebuilds(self, ebuildlist, dynamic_data): - # detect unused local USE-descriptions - dynamic_data['used_useflags'] = set() for y_ebuild in ebuildlist: self.reset_futures(dynamic_data) @@ -373,7 +371,7 @@ class Scanner(object): ('fetches', 'FetchChecks'), ('description', 'DescriptionChecks'), ('keywords', 'KeywordChecks'), - ('use_flags', 'USEFlagChecks'), ('ruby', 'RubyEclassChecks'), + ('pkgmetadata', 'PkgMetadata'), ('ruby', 'RubyEclassChecks'), ('restrict', 'RestrictChecks'), ('mtime', 'MtimeChecks'), ('multicheck', 'MultiCheck'), # Options.is_forced() is used to bypass further checks @@ -409,8 +407,8 @@ class Scanner(object): # initialize per pkg plugin final checks here # need to set it up for ==> self.modules_list or some other ordered list xpkg_complete = False - for mod in [('unused', 'UnusedChecks')]: - if mod[0]: + for mod in [('pkgmetadata', 'PkgMetadata')]: + if mod[0] and mod[1] not in self.modules: mod_class = MODULE_CONTROLLER.get_class(mod[0]) logging.debug("Initializing class name: %s", mod_class.__name__) self.modules[mod[1]] = mod_class(**self.set_kwargs(mod[0]))