commit: 5c827bb7cf9a0b1de5e1ff6640b408486b4e0a8b
Author: Tom Wijsman <tomwij <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 4 09:17:12 2014 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Mon Nov 17 00:53:14 2014 +0000
URL:
http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=5c827bb7
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 8a1a043..05d9a14 100755
--- a/pym/repoman/main.py
+++ b/pym/repoman/main.py
@@ -49,6 +49,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
@@ -281,7 +282,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.
@@ -322,7 +323,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())
@@ -427,32 +428,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