commit:     916886782e5a4123d95ce50e2593d9c2bb114995
Author:     Tom Wijsman <tomwij <AT> gentoo <DOT> org>
AuthorDate: Wed Jun  4 09:17:12 2014 +0000
Commit:     Tom Wijsman <tomwij <AT> gentoo <DOT> org>
CommitDate: Wed Jun  4 09:17:12 2014 +0000
URL:        
http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=91688678

repoman/main.py: Split KEYWORDS checks to checks/ebuilds/keywords.py

---
 pym/repoman/checks/ebuilds/keywords.py | 67 ++++++++++++++++++++++++++++++++++
 pym/repoman/main.py                    | 32 ++++------------
 2 files changed, 75 insertions(+), 24 deletions(-)

diff --git a/pym/repoman/checks/ebuilds/keywords.py 
b/pym/repoman/checks/ebuilds/keywords.py
new file mode 100644
index 0000000..29de0db
--- /dev/null
+++ b/pym/repoman/checks/ebuilds/keywords.py
@@ -0,0 +1,67 @@
+
+'''keywords.py
+Perform KEYWORDS related checks
+'''
+
+
+class KeywordChecks(object):
+       '''Perform checks on the KEYWORDS of an ebuild'''
+
+       def __init__(self, qatracker):
+               '''
+               @param qatracker: QATracker instance
+               '''
+               self.qatracker = qatracker
+               self.slot_keywords = {}
+
+       def prepare(self):
+               '''Prepare the checks for the next package.'''
+               self.slot_keywords = {}
+
+       def check(
+               self, pkg, package, ebuild, y_ebuild, keywords, ebuild_archs, 
changed,
+               live_ebuild):
+               '''Perform the check.
+
+               @param pkg: Package in which we check (object).
+               @param package: Package in which we check (string).
+               @param ebuild: Ebuild which we check (object).
+               @param y_ebuild: Ebuild which we check (string).
+               @param keywords: All the keywords (including -...) of the 
ebuild.
+               @param ebuild_archs: Just the architectures (no prefixes) of 
the ebuild.
+               @param changed: Changes instance
+               @param slot_keywords: A dictionary of keywords per slot.
+               @param live_ebuild: A boolean that determines if this is a live 
ebuild.
+               '''
+               self._checkAddedWithStableKeywords(
+                       package, ebuild, y_ebuild, keywords, changed)
+               self._checkForDroppedKeywords(
+                       pkg, ebuild, ebuild_archs, live_ebuild)
+
+               self.slot_keywords[pkg.slot].update(ebuild_archs)
+
+       def _checkAddedWithStableKeywords(
+               self, package, ebuild, y_ebuild, keywords, changed):
+               catdir, pkgdir = package.split("/")
+
+               is_stable = lambda kw: not kw.startswith("~") and not 
kw.startswith("-")
+               stable_keywords = list(filter(is_stable, keywords))
+               if stable_keywords:
+                       if ebuild.ebuild_path in changed.new_ebuilds and catdir 
!= "virtual":
+                               stable_keywords.sort()
+                               self.qatracker.add_error(
+                                       "KEYWORDS.stable",
+                                       "%s/%s.ebuild added with stable 
keywords: %s" %
+                                       (package, y_ebuild, " 
".join(stable_keywords)))
+
+       def _checkForDroppedKeywords(
+               self, pkg, ebuild, ebuild_archs, live_ebuild):
+               previous_keywords = self.slot_keywords.get(pkg.slot)
+               if previous_keywords is None:
+                       self.slot_keywords[pkg.slot] = set()
+               elif ebuild_archs and "*" not in ebuild_archs and not 
live_ebuild:
+                       dropped_keywords = 
previous_keywords.difference(ebuild_archs)
+                       if dropped_keywords:
+                               self.qatracker.add_error("KEYWORDS.dropped",
+                                       "%s: %s" %
+                                       (ebuild.relative_path, " 
".join(sorted(dropped_keywords))))
\ No newline at end of file

diff --git a/pym/repoman/main.py b/pym/repoman/main.py
index b347369..62c1509 100755
--- a/pym/repoman/main.py
+++ b/pym/repoman/main.py
@@ -42,6 +42,7 @@ from repoman.argparser import parse_args
 from repoman.checks.directories.files import FileChecks
 from repoman.checks.ebuilds.checks import run_checks, checks_init
 from repoman.checks.ebuilds.fetches import FetchChecks
+from repoman.checks.ebuilds.keywords import KeywordChecks
 from repoman.checks.ebuilds.isebuild import IsEbuild
 from repoman.checks.ebuilds.thirdpartymirrors import ThirdPartyMirrors
 from repoman.checks.ebuilds.manifests import Manifests
@@ -274,7 +275,7 @@ fetchcheck = FetchChecks(qatracker, repoman_settings, 
repo_settings, portdb,
 pkgmeta = PkgMetadata(options, qatracker, repoman_settings)
 thirdparty = ThirdPartyMirrors(repoman_settings, qatracker)
 use_flag_checks = USEFlagChecks(qatracker, uselist)
-
+keywordcheck = KeywordChecks(qatracker)
 
 for xpkg in effective_scanlist:
        # ebuilds and digests added to cvs respectively.
@@ -315,7 +316,7 @@ for xpkg in effective_scanlist:
                continue
 ######################
 
-       slot_keywords = {}
+       keywordcheck.prepare()
 
        # Sort ebuilds in ascending order for the KEYWORDS.dropped check.
        ebuildlist = sorted(pkgs.values())
@@ -425,32 +426,15 @@ for xpkg in effective_scanlist:
                                (ebuild.relative_path, 
len(myaux['DESCRIPTION']), max_desc_len))
 
                keywords = myaux["KEYWORDS"].split()
-               stable_keywords = []
-               for keyword in keywords:
-                       if not keyword.startswith("~") and \
-                               not keyword.startswith("-"):
-                               stable_keywords.append(keyword)
-               if stable_keywords:
-                       if ebuild.ebuild_path in changed.new_ebuilds and catdir 
!= "virtual":
-                               stable_keywords.sort()
-                               qatracker.add_error("KEYWORDS.stable",
-                                       "%s/%s.ebuild added with stable 
keywords: %s" %
-                                       (xpkg, y_ebuild, " 
".join(stable_keywords)))
 
                ebuild_archs = set(
                        kw.lstrip("~") for kw in keywords if not 
kw.startswith("-"))
 
-               previous_keywords = slot_keywords.get(pkg.slot)
-               if previous_keywords is None:
-                       slot_keywords[pkg.slot] = set()
-               elif ebuild_archs and "*" not in ebuild_archs and not 
live_ebuild:
-                       dropped_keywords = 
previous_keywords.difference(ebuild_archs)
-                       if dropped_keywords:
-                               qatracker.add_error("KEYWORDS.dropped",
-                                       "%s: %s" %
-                                       (ebuild.relative_path, " 
".join(sorted(dropped_keywords))))
-
-               slot_keywords[pkg.slot].update(ebuild_archs)
+               #######################
+               keywordcheck.check(
+                       pkg, xpkg, ebuild, y_ebuild, keywords, ebuild_archs, 
changed,
+                       live_ebuild)
+               #######################
 
                # KEYWORDS="-*" is a stupid replacement for package.mask
                # and screws general KEYWORDS semantics

Reply via email to