commit: 20d723057fe75d128debdb50705d18a3c85449f0 Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> AuthorDate: Sun Jan 3 10:35:49 2016 +0000 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> CommitDate: Thu Jan 21 00:35:22 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=20d72305
repoman: Migrate code from _scan_ebuilds to a new EbuildMetadata class and check pym/repoman/modules/scan/metadata/__init__.py | 10 +++++- .../modules/scan/metadata/ebuild_metadata.py | 39 ++++++++++++++++++++++ pym/repoman/scanner.py | 27 +-------------- 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/pym/repoman/modules/scan/metadata/__init__.py b/pym/repoman/modules/scan/metadata/__init__.py index 7327ec0..eba6565 100644 --- a/pym/repoman/modules/scan/metadata/__init__.py +++ b/pym/repoman/modules/scan/metadata/__init__.py @@ -10,7 +10,7 @@ module_spec = { 'name': 'metadata', 'description': doc, 'provides':{ - 'metadata-module': { + 'pkg-metadata': { 'name': "pkgmetadata", 'class': "PkgMetadata", 'description': doc, @@ -18,6 +18,14 @@ module_spec = { 'func_desc': { }, }, + 'ebuild-metadata': { + 'name': "ebuild_metadata", + 'class': "EbuildMetadata", + 'description': doc, + 'functions': ['check'], + 'func_desc': { + }, + }, } } diff --git a/pym/repoman/modules/scan/metadata/ebuild_metadata.py b/pym/repoman/modules/scan/metadata/ebuild_metadata.py new file mode 100644 index 0000000..143a40e --- /dev/null +++ b/pym/repoman/modules/scan/metadata/ebuild_metadata.py @@ -0,0 +1,39 @@ +# -*- coding:utf-8 -*- + +'''Ebuild Metadata Checks''' + +import re +import sys + +if sys.hexversion >= 0x3000000: + basestring = str + +NON_ASCII_RE = re.compile(r'[^\x00-\x7f]') + + +class EbuildMetadata(object): + + def __init__(self, **kwargs): + self.qatracker = kwargs.get('qatracker') + + def check(self, **kwargs): + ebuild = kwargs.get('ebuild') + for k, v in ebuild.metadata.items(): + if not isinstance(v, basestring): + continue + m = NON_ASCII_RE.search(v) + if m is not None: + self.qatracker.add_error( + "variable.invalidchar", + "%s: %s variable contains non-ASCII " + "character at position %s" % + (ebuild.relative_path, k, m.start() + 1)) + return {'continue': False} + + @property + def runInPkgs(self): + return (False, []) + + @property + def runInEbuilds(self): + return (True, [self.check]) diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py index a8aa2f3..6f3fb53 100644 --- a/pym/repoman/scanner.py +++ b/pym/repoman/scanner.py @@ -5,8 +5,6 @@ from __future__ import print_function, unicode_literals import copy import io import logging -import re -import sys from itertools import chain from pprint import pformat @@ -47,18 +45,10 @@ MODULE_CONTROLLER = Modules(path=MODULES_PATH, namepath="repoman.modules.scan") MODULE_NAMES = MODULE_CONTROLLER.module_names[:] - -if sys.hexversion >= 0x3000000: - basestring = str - -NON_ASCII_RE = re.compile(r'[^\x00-\x7f]') - - def sort_key(item): return item[2].sub_path - class Scanner(object): '''Primary scan class. Operates all the small Q/A tests and checks''' @@ -311,7 +301,7 @@ class Scanner(object): # initialize per ebuild plugin checks here # need to set it up for ==> self.modules_list or some other ordered list for mod in [('ebuild', 'Ebuild'), ('live', 'LiveEclassChecks'), - ('eapi', 'EAPIChecks')]: + ('eapi', 'EAPIChecks'), ('ebuild_metadata', 'EbuildMetadata')]: if mod[0]: mod_class = MODULE_CONTROLLER.get_class(mod[0]) logging.debug("Initializing class name: %s", mod_class.__name__) @@ -338,21 +328,6 @@ class Scanner(object): if y_ebuild_continue: continue - - for k, v in dynamic_data['ebuild'].metadata.items(): - if not isinstance(v, basestring): - continue - m = NON_ASCII_RE.search(v) - if m is not None: - self.qatracker.add_error( - "variable.invalidchar", - "%s: %s variable contains non-ASCII " - "character at position %s" % - (dynamic_data['ebuild'].relative_path, k, m.start() + 1)) - - if not dynamic_data['src_uri_error']: - self.thirdparty.check(dynamic_data['ebuild'].metadata, dynamic_data['ebuild'].relative_path) - if dynamic_data['ebuild'].metadata.get("PROVIDE"): self.qatracker.add_error("virtual.oldstyle", dynamic_data['ebuild'].relative_path)