repoman: Warn about dropped keywords only for latest in SLOT.
Rationale: There is no point in rekeywording non-latest and nobody ever does that.
Modified by: Brian Dolbec <dolsen@gentoo.org> , shorten commit message, add missed docstring.
For example:
$ epkginfo texlive-latex
* dev-texlive/texlive-latex [gentoo]
Maintainer: aballier@gentoo.org (Alexis Ballier)
Maintainer: tex@gentoo.org (Gentoo TeX Project)
Upstream: None specified
Homepage: http://www.tug.org/texlive/
Location: /mnt/dev/gentoo-x86/dev-texlive/texlive-latex
Keywords: 2012:0: s390 sh sparc
Keywords: 2015:0: hppa ppc ppc64
Keywords: 2016:0: alpha amd64 arm arm64 ia64 x86
Keywords: 2017:0: ~alpha ~amd64 ~amd64-fbsd ~amd64-linux ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc-macos ~ppc64 ~s390 ~sh ~sparc ~sparc-solaris ~x64-macos ~x64-solaris ~x86 ~x86-fbsd ~x86-linux ~x86-macos ~x86-solaris
Before:
RepoMan scours the neighborhood...
KEYWORDS.dropped 3
dev-texlive/texlive-latex/texlive-latex-2014.ebuild: ia64 sparc
dev-texlive/texlive-latex/texlive-latex-2015.ebuild: ia64 sparc
dev-texlive/texlive-latex/texlive-latex-2016.ebuild: sparc
repo.eapi.deprecated 1
dev-texlive/texlive-latex/texlive-latex-2012.ebuild: 4
After:
RepoMan scours the neighborhood...
repo.eapi.deprecated 1
dev-texlive/texlive-latex/texlive-latex-2012.ebuild: 4
Or also:
$ epkginfo ffmpeg
* media-video/ffmpeg [gentoo]
Maintainer: media-video@gentoo.org
Upstream: None specified
Homepage: http://ffmpeg.org/
Location: /mnt/dev/gentoo-x86/media-video/ffmpeg
Keywords: 2.8.10:0/54.56.56: alpha amd64 arm hppa ia64 ppc ppc64 sparc x86
Keywords: 2.8.11:0/54.56.56: ~alpha ~amd64 ~amd64-fbsd ~amd64-linux ~arm ~arm-linux ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~x86-linux
Keywords: 3.2.4:0/55.57.57: alpha amd64 arm hppa ia64 ppc ppc64 x86
Keywords: 3.2.5:0/55.57.57:
Keywords: 3.2.6:0/55.57.57: ~alpha ~ia64
Keywords: 3.3.2:0/55.57.57: ~amd64 ~amd64-fbsd ~amd64-linux ~arm ~arm-linux ~arm64 ~hppa ~mips ~ppc ~ppc-macos ~ppc64 ~x64-macos ~x64-solaris ~x86 ~x86-fbsd ~x86-linux ~x86-macos ~x86-solaris
Keywords: 9999:0/55.57.57:
Before:
RepoMan scours the neighborhood...
KEYWORDS.dropped 4
media-video/ffmpeg/ffmpeg-3.2.4.ebuild: sparc
media-video/ffmpeg/ffmpeg-3.2.5.ebuild: sparc
media-video/ffmpeg/ffmpeg-3.2.6.ebuild: sparc
media-video/ffmpeg/ffmpeg-3.3.2.ebuild: alpha ia64 sparc
After:
RepoMan scours the neighborhood...
KEYWORDS.dropped 1
media-video/ffmpeg/ffmpeg-3.3.2.ebuild: alpha ia64 sparc
X-Gentoo-Bug: 256189
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=256189
diff --git a/repoman/pym/repoman/modules/scan/keywords/keywords.py b/repoman/pym/repoman/modules/scan/keywords/keywords.py
index 7cb2fe9..1e96239 100644
--- a/repoman/pym/repoman/modules/scan/keywords/keywords.py
+++ b/repoman/pym/repoman/modules/scan/keywords/keywords.py
@@ -26,6 +26,7 @@
def prepare(self, **kwargs):
'''Prepare the checks for the next package.'''
self.slot_keywords = {}
+ self.dropped_keywords = {}
return False
def check(self, **kwargs):
@@ -57,6 +58,19 @@
self.slot_keywords[pkg.slot].update(ebuild.archs)
return False
+ def check_dropped_keywords(self, **kwargs):
+ '''Report on any dropped keywords for the latest ebuild in a slot
+
+ @returns: boolean
+ '''
+ for ebuild, arches in self.dropped_keywords.values():
+ if arches:
+ self.qatracker.add_error(
+ "KEYWORDS.dropped", "%s: %s" % (
+ ebuild,
+ " ".join(sorted(arches))))
+ return False
+
@staticmethod
def _isKeywordStable(keyword):
return not keyword.startswith("~") and not keyword.startswith("-")
@@ -80,12 +94,9 @@
if previous_keywords is None:
self.slot_keywords[pkg.slot] = set()
elif ebuild_archs and "*" not in ebuild_archs and not ebuild.live_ebuild:
+ self.slot_keywords[pkg.slot].update(ebuild_archs)
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))))
+ self.dropped_keywords[pkg.slot] = (ebuild.relative_path, { arch for arch in dropped_keywords})
def _checkForInvalidKeywords(self, ebuild, xpkg, y_ebuild):
myuse = ebuild.keywords
@@ -131,3 +142,8 @@
def runInEbuilds(self):
'''Ebuild level scans'''
return (True, [self.check])
+
+ @property
+ def runInFinal(self):
+ '''Final package level scans'''
+ return (True, [self.check_dropped_keywords])
diff --git a/repoman/pym/repoman/scanner.py b/repoman/pym/repoman/scanner.py
index 8999751..e13d4f6 100644
--- a/repoman/pym/repoman/scanner.py
+++ b/repoman/pym/repoman/scanner.py
@@ -414,7 +414,7 @@
# 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 [('pkgmetadata', 'PkgMetadata')]:
+ for mod in [('pkgmetadata', 'PkgMetadata'), ('keywords', 'KeywordChecks')]:
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__)