commit:     4d9b1d6fc00b48583bec7439b548cd29530c518b
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  3 19:11:22 2016 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sun Jan 10 20:15:08 2016 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=4d9b1d6f

repoman: Create a new ArchChecks class plugin

 pym/repoman/modules/scan/arches/__init__.py | 23 +++++++++++
 pym/repoman/modules/scan/arches/arches.py   | 64 +++++++++++++++++++++++++++++
 pym/repoman/scanner.py                      | 47 +--------------------
 3 files changed, 89 insertions(+), 45 deletions(-)

diff --git a/pym/repoman/modules/scan/arches/__init__.py 
b/pym/repoman/modules/scan/arches/__init__.py
new file mode 100644
index 0000000..b570dac
--- /dev/null
+++ b/pym/repoman/modules/scan/arches/__init__.py
@@ -0,0 +1,23 @@
+# Copyright 2015-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+doc = """Arches plug-in module for repoman.
+Performs archs checks on ebuilds."""
+__doc__ = doc[:]
+
+
+module_spec = {
+       'name': 'arches',
+       'description': doc,
+       'provides':{
+               'archs-module': {
+                       'name': "arches",
+                       'class': "ArchChecks",
+                       'description': doc,
+                       'functions': ['check'],
+                       'func_desc': {
+                       },
+               },
+       }
+}
+

diff --git a/pym/repoman/modules/scan/arches/arches.py 
b/pym/repoman/modules/scan/arches/arches.py
new file mode 100644
index 0000000..2c32028
--- /dev/null
+++ b/pym/repoman/modules/scan/arches/arches.py
@@ -0,0 +1,64 @@
+# -*- coding:utf-8 -*-
+
+
+class ArchChecks(object):
+
+       def __init__(self, **kwargs):
+               self.options = kwargs.get('options')
+               self.repo_settings = kwargs.get('repo_settings')
+               self.profiles = kwargs.get('profiles')
+
+       def check(self, **kwargs):
+               ebuild = kwargs.get('ebuild')
+               if self.options.ignore_arches:
+                       arches = [[
+                               self.repo_settings.repoman_settings["ARCH"], 
self.repo_settings.repoman_settings["ARCH"],
+                               
self.repo_settings.repoman_settings["ACCEPT_KEYWORDS"].split()]]
+               else:
+                       arches = set()
+                       for keyword in ebuild.keywords:
+                               if keyword[0] == "-":
+                                       continue
+                               elif keyword[0] == "~":
+                                       arch = keyword[1:]
+                                       if arch == "*":
+                                               for expanded_arch in 
self.profiles:
+                                                       if expanded_arch == 
"**":
+                                                               continue
+                                                       arches.add(
+                                                               (keyword, 
expanded_arch, (
+                                                                       
expanded_arch, "~" + expanded_arch)))
+                                       else:
+                                               arches.add((keyword, arch, 
(arch, keyword)))
+                               else:
+                                       # For ebuilds with stable keywords, 
check if the
+                                       # dependencies are satisfiable for 
unstable
+                                       # configurations, since use.stable.mask 
is not
+                                       # applied for unstable configurations 
(see bug
+                                       # 563546).
+                                       if keyword == "*":
+                                               for expanded_arch in 
self.profiles:
+                                                       if expanded_arch == 
"**":
+                                                               continue
+                                                       arches.add(
+                                                               (keyword, 
expanded_arch, (expanded_arch,)))
+                                                       arches.add(
+                                                               (keyword, 
expanded_arch,
+                                                                       
(expanded_arch, "~" + expanded_arch)))
+                                       else:
+                                               arches.add((keyword, keyword, 
(keyword,)))
+                                               arches.add((keyword, keyword,
+                                                       (keyword, "~" + 
keyword)))
+                       if not arches:
+                               # Use an empty profile for checking 
dependencies of
+                               # packages that have empty KEYWORDS.
+                               arches.add(('**', '**', ('**',)))
+               return {'continue': False, 'arches': arches}
+
+       @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 83193fd..7b07a95 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -301,6 +301,7 @@ class Scanner(object):
                                ('eapi', 'EAPIChecks'), ('ebuild_metadata', 
'EbuildMetadata'),
                                ('thirdpartymirrors', 'ThirdPartyMirrors'),
                                ('description', 'DescriptionChecks'), (None, 
'KeywordChecks'),
+                               ('arches', 'ArchChecks'),
                                ]:
                                if mod[0]:
                                        mod_class = 
MODULE_CONTROLLER.get_class(mod[0])
@@ -351,50 +352,6 @@ class Scanner(object):
                                self.liveeclasscheck.check(
                                        dynamic_data['pkg'], xpkg, 
dynamic_data['ebuild'], y_ebuild, dynamic_data['ebuild'].keywords, 
self.repo_metadata['pmaskdict'])
 
-                       if self.options.ignore_arches:
-                               arches = [[
-                                       
self.repo_settings.repoman_settings["ARCH"], 
self.repo_settings.repoman_settings["ARCH"],
-                                       
self.repo_settings.repoman_settings["ACCEPT_KEYWORDS"].split()]]
-                       else:
-                               arches = set()
-                               for keyword in dynamic_data['ebuild'].keywords:
-                                       if keyword[0] == "-":
-                                               continue
-                                       elif keyword[0] == "~":
-                                               arch = keyword[1:]
-                                               if arch == "*":
-                                                       for expanded_arch in 
self.profiles:
-                                                               if 
expanded_arch == "**":
-                                                                       continue
-                                                               arches.add(
-                                                                       
(keyword, expanded_arch, (
-                                                                               
expanded_arch, "~" + expanded_arch)))
-                                               else:
-                                                       arches.add((keyword, 
arch, (arch, keyword)))
-                                       else:
-                                               # For ebuilds with stable 
keywords, check if the
-                                               # dependencies are satisfiable 
for unstable
-                                               # configurations, since 
use.stable.mask is not
-                                               # applied for unstable 
configurations (see bug
-                                               # 563546).
-                                               if keyword == "*":
-                                                       for expanded_arch in 
self.profiles:
-                                                               if 
expanded_arch == "**":
-                                                                       continue
-                                                               arches.add(
-                                                                       
(keyword, expanded_arch, (expanded_arch,)))
-                                                               arches.add(
-                                                                       
(keyword, expanded_arch,
-                                                                               
(expanded_arch, "~" + expanded_arch)))
-                                               else:
-                                                       arches.add((keyword, 
keyword, (keyword,)))
-                                                       arches.add((keyword, 
keyword,
-                                                               (keyword, "~" + 
keyword)))
-                               if not arches:
-                                       # Use an empty profile for checking 
dependencies of
-                                       # packages that have empty KEYWORDS.
-                                       arches.add(('**', '**', ('**',)))
-
                        unknown_pkgs = set()
                        baddepsyntax = False
                        badlicsyntax = False
@@ -551,7 +508,7 @@ class Scanner(object):
                                continue
 
                        relevant_profiles = []
-                       for keyword, arch, groups in arches:
+                       for keyword, arch, groups in dynamic_data['arches']:
                                if arch not in self.profiles:
                                        # A missing profile will create an 
error further down
                                        # during the KEYWORDS verification.

Reply via email to