summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-08-22 13:08:04 -0700
committerZac Medico <zmedico@gentoo.org>2010-08-22 13:08:04 -0700
commit93ceaa213a10df814de8e893f4312dc43e2047c4 (patch)
tree95b6f84c26514b8db60e9b09355990797c44ecfb
parentc810b639133301f605eabb1c9644d05cc0ff515a (diff)
downloadportage-93ceaa213a10df814de8e893f4312dc43e2047c4.tar.gz
portage-93ceaa213a10df814de8e893f4312dc43e2047c4.tar.bz2
portage-93ceaa213a10df814de8e893f4312dc43e2047c4.zip
Make InheritDeprecated detect indirect inherits of deprecated eclasses,
and indicate the indirect nature in the error message.
-rw-r--r--pym/repoman/checks.py25
1 files changed, 20 insertions, 5 deletions
diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py
index 41235c5fa..732559958 100644
--- a/pym/repoman/checks.py
+++ b/pym/repoman/checks.py
@@ -361,7 +361,7 @@ class ImplicitRuntimeDeps(LineCheck):
yield 'RDEPEND is not explicitly assigned'
class InheritDeprecated(LineCheck):
- """Check if ebuild directly inherits a deprecated eclass"""
+ """Check if ebuild directly or indirectly inherits a deprecated eclass."""
repoman_check_name = 'inherit.deprecated'
@@ -379,6 +379,8 @@ class InheritDeprecated(LineCheck):
def new(self, pkg):
self._errors = []
+ self._indirect_deprecated = set(eclass for eclass in \
+ self.deprecated_classes if eclass in pkg.inherited)
def check(self, num, line):
@@ -393,13 +395,13 @@ class InheritDeprecated(LineCheck):
return
for eclass in direct_inherits:
- replacement = self.deprecated_classes.get(eclass)
- if replacement is None:
- pass
- elif replacement is False:
+ replacement = self.deprecated_classes[eclass]
+ if replacement is False:
+ self._indirect_deprecated.discard(eclass)
self._errors.append("please migrate from " + \
"'%s' (no replacement) on line: %d" % (eclass, num + 1))
else:
+ self._indirect_deprecated.discard(eclass)
self._errors.append("please migrate from " + \
"'%s' to '%s' on line: %d" % \
(eclass, replacement, num + 1))
@@ -409,6 +411,19 @@ class InheritDeprecated(LineCheck):
yield error
del self._errors
+ for eclass in self._indirect_deprecated:
+ replacement = self.deprecated_classes.get(eclass)
+ if replacement is None:
+ pass
+ elif replacement is False:
+ yield "please migrate from indirect " + \
+ "inherit of '%s' (no replacement)" % (eclass,)
+ else:
+ yield "please migrate from indirect " + \
+ "inherit of '%s' to '%s'" % \
+ (eclass, replacement)
+ del self._indirect_deprecated
+
class InheritAutotools(LineCheck):
"""
Make sure appropriate functions are called in