Add a check for redundant cd "${S}" statements on the first
authorZac Medico <zmedico@gentoo.org>
Fri, 2 Nov 2007 07:24:55 +0000 (07:24 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 2 Nov 2007 07:24:55 +0000 (07:24 -0000)
line of src_(compile|install|test) ebuild methods. Thanks to
Petteri Räty <betelgeuse@gentoo.org> for this patch.
(trunk r8351 and r8353)

svn path=/main/branches/2.1.2/; revision=8376

bin/repoman

index 328aec4ecb230af464285add554fdba39dd6bbbc..84033318a098e87d5602282ad1d641d2b93415f2 100755 (executable)
@@ -836,6 +836,28 @@ class EbuildUselessDodoc(object):
                                        (match.group(2), ) + " on line: %d"))
                return errors
 
+class EbuildUselessCdS(object):
+       """Check for redundant cd ${S} statements"""
+       repoman_check_name = 'ebuild.minorsyn'
+       method_re = re.compile(r'^\s*src_(compile|install|test)\s*\(\)')
+       cds_re = re.compile(r'^\s*cd\s+("\$(\{S\}|S)"|\$(\{S\}|S))\s')
+
+       def __init__(self, contents):
+               self.contents = contents
+
+       def Run(self):
+               errors = []
+               check_next_line = False
+               for num, line in enumerate(self.contents):
+                       if check_next_line:
+                               check_next_line = False
+                               if self.cds_re.match(line):
+                                       errors.append((num + 1,
+                                               'Ebuild has redundant cd ${S} statement on line: %d'))
+                       elif self.method_re.match(line):
+                               check_next_line = True
+               return errors
+
 if mymode == "commit":
        retval = ("","")
        if isCvs:
@@ -1459,7 +1481,7 @@ for x in scanlist:
                finally:
                        f.close()
                        del f
-               for check in (EbuildQuote, EbuildUselessDodoc):
+               for check in (EbuildQuote, EbuildUselessDodoc, EbuildUselessCdS):
                        c = check(contents)
                        errors = c.Run()
                        for e in errors: