commit:     8f332cc2744b41dc0fccfbf4f194df3b97684a86
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 04:44:55 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=8f332cc2

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 c2e64a5..38e1357 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]))

Reply via email to