InheritEclass: avoid false positive in func regex
authorZac Medico <zmedico@gentoo.org>
Fri, 8 Jun 2012 02:51:48 +0000 (19:51 -0700)
committerZac Medico <zmedico@gentoo.org>
Fri, 8 Jun 2012 02:51:48 +0000 (19:51 -0700)
pym/repoman/checks.py

index 65f024ce4da517525079103a0fec5e1f1bb25c40..2864d675dccb6be292412001d2f6bb077f52327d 100644 (file)
@@ -469,7 +469,10 @@ class InheritEclass(LineCheck):
                self._ignore_missing = ignore_missing
                inherit_re = eclass
                self._inherit_re = re.compile(r'^(\s*|.*[|&]\s*)\binherit\s(.*\s)?%s(\s|$)' % inherit_re)
-               self._func_re = re.compile(r'\b(' + '|'.join(funcs) + r')\b')
+               # Match when the function is preceded only by leading whitespace or a shell
+               # operator such as (, {, |, ||, or &&. This prevents false postives in
+               # things like elog messages, as reported in bug #413285.
+               self._func_re = re.compile(r'(^|[|&{(])\s*\b(' + '|'.join(funcs) + r')\b')
 
        def new(self, pkg):
                self.repoman_check_name = 'inherit.missing'
@@ -493,7 +496,7 @@ class InheritEclass(LineCheck):
                        if s:
                                self._func_call = True
                                return '%s.eclass is not inherited, but "%s" found at line: %s' % \
-                                       (self._eclass, s.group(0), '%d')
+                                       (self._eclass, s.group(2), '%d')
                elif not self._func_call:
                        self._func_call = self._func_re.search(line)