From 6bfbbbefc91069cb4244cf5a5462e6cef3cef3e6 Mon Sep 17 00:00:00 2001 From: wired Date: Sun, 15 Aug 2010 01:56:40 +0300 Subject: [PATCH] repoman: check for deprecated eclasses compare the inherited eclasses to a list of deprecated eclasses. print QA warnings for each deprecated eclass found and suggest an alternative for those that have one. --- bin/repoman | 2 ++ man/repoman.1 | 3 +++ pym/repoman/checks.py | 31 ++++++++++++++++++++++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/bin/repoman b/bin/repoman index df4232516..3b28bf5be 100755 --- a/bin/repoman +++ b/bin/repoman @@ -285,6 +285,7 @@ qahelp={ "file.name":"File/dir name must be composed of only the following chars: %s " % allowed_filename_chars, "file.UTF8":"File is not UTF8 compliant", "inherit.autotools":"Ebuild inherits autotools but does not call eautomake, eautoconf or eautoreconf", + "inherit.deprecated":"Ebuild inherits a deprecated eclass", "java.eclassesnotused":"With virtual/jdk in DEPEND you must inherit a java eclass", "KEYWORDS.dropped":"Ebuilds that appear to have dropped KEYWORDS for some arch", "KEYWORDS.missing":"Ebuilds that have a missing or empty KEYWORDS variable", @@ -396,6 +397,7 @@ qawarnings = set(( "ebuild.patches", "file.size", "inherit.autotools", +"inherit.deprecated", "java.eclassesnotused", "metadata.warning", "virtual.versioned", diff --git a/man/repoman.1 b/man/repoman.1 index ad4c74cb3..28216d6e8 100644 --- a/man/repoman.1 +++ b/man/repoman.1 @@ -304,6 +304,9 @@ Files in the files directory must be under 20k .B inherit.autotools Ebuild inherits autotools but does not call eautomake, eautoconf or eautoreconf .TP +.B inherit.deprecated +Ebuild inherits a deprecated eclass +.TP .B java.eclassesnotused With virtual/jdk in DEPEND you must inherit a java eclass. Refer to \fIhttp://www.gentoo.org/proj/en/java/java\-devel.xml\fR for more information. diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py index ed3079574..f3ab6e4c2 100644 --- a/pym/repoman/checks.py +++ b/pym/repoman/checks.py @@ -360,6 +360,35 @@ class ImplicitRuntimeDeps(LineCheck): if self._depend and not self._rdepend: yield 'RDEPEND is not explicitly assigned' +class InheritDeprecated(LineCheck): + """Check if ebuild inherits a deprecated eclass""" + + repoman_check_name = 'inherit.deprecated' + + # deprecated eclass : new eclass (0 if no new eclass) + deprecated_classes = { + "gems": "ruby-fakegem", + "php-pear": "php-pear-r1", + "qt3": 0, + "qt4": "qt4-r2", + "ruby": "ruby-ng", + "ruby-gnome2": "ruby-ng-gnome2" + } + + def new(self, pkg): + self.matched_eclasses = frozenset(self.deprecated_classes.keys()).intersection(pkg.inherited) + + def check(self, num, line): + pass + + def end(self): + for i in self.matched_eclasses: + if self.deprecated_classes[i] == 0: + yield i + ": deprecated eclass" + else: + yield "uses deprecated eclass '"+ i +"'. please migrate to '"+ \ + self.deprecated_classes[i] +"'" + class InheritAutotools(LineCheck): """ Make sure appropriate functions are called in @@ -554,7 +583,7 @@ _constant_checks = tuple((c() for c in ( EbuildAssignment, Eapi3EbuildAssignment, EbuildUselessDodoc, EbuildUselessCdS, EbuildNestedDie, EbuildPatches, EbuildQuotedA, EapiDefinition, EprefixifyDefined, - ImplicitRuntimeDeps, InheritAutotools, IUseUndefined, + ImplicitRuntimeDeps, InheritAutotools, InheritDeprecated, IUseUndefined, EMakeParallelDisabled, EMakeParallelDisabledViaMAKEOPTS, NoAsNeeded, DeprecatedBindnowFlags, SrcUnpackPatches, WantAutoDefaultValue, SrcCompileEconf, Eapi3DeprecatedFuncs, -- 2.26.2