commit: c50a1f3774b5f5e79b0368d44ef58425605c7adf Author: Alexis Ballier <aballier <AT> gentoo <DOT> org> AuthorDate: Mon Jun 26 15:16:37 2017 +0000 Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> CommitDate: Tue Jul 18 18:40:50 2017 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=c50a1f37
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 <AT> gentoo.org> , shorten commit message, add missed docstring. For example: $ epkginfo texlive-latex * dev-texlive/texlive-latex [gentoo] Maintainer: aballier <AT> gentoo.org (Alexis Ballier) Maintainer: tex <AT> 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 <AT> 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 .../pym/repoman/modules/scan/keywords/keywords.py | 26 +++++++++++++++++----- repoman/pym/repoman/scanner.py | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/repoman/pym/repoman/modules/scan/keywords/keywords.py b/repoman/pym/repoman/modules/scan/keywords/keywords.py index 7cb2fe912..1e9623906 100644 --- a/repoman/pym/repoman/modules/scan/keywords/keywords.py +++ b/repoman/pym/repoman/modules/scan/keywords/keywords.py @@ -26,6 +26,7 @@ class KeywordChecks(ScanBase): 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 @@ class KeywordChecks(ScanBase): 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 @@ class KeywordChecks(ScanBase): 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 @@ class KeywordChecks(ScanBase): 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 899975183..e13d4f68b 100644 --- a/repoman/pym/repoman/scanner.py +++ b/repoman/pym/repoman/scanner.py @@ -414,7 +414,7 @@ class Scanner(object): # 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__)