From e0f037138a16a8d3d608fdd1a1fd23f06df5c6f3 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 1 Nov 2007 02:25:18 +0000 Subject: =?UTF-8?q?Add=20a=20check=20for=20redundant=20cd=20"${S}"=20state?= =?UTF-8?q?ments=20on=20the=20first=20line=20of=20src=5F(compile|install|t?= =?UTF-8?q?est)=20ebuild=20methods.=20Thanks=20to=20Petteri=20R=C3=A4ty=20?= =?UTF-8?q?=20for=20this=20patch.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/main/trunk/; revision=8351 --- bin/repoman | 6 +++--- pym/repoman/checks.py | 23 ++++++++++++++++++++++- pym/repoman/errors.py | 1 + 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/bin/repoman b/bin/repoman index fec17e138..1f10a91d9 100755 --- a/bin/repoman +++ b/bin/repoman @@ -45,12 +45,12 @@ del os.environ["PORTAGE_LEGACY_GLOBALS"] try: from repoman.checks import EbuildWhitespace, EbuildHeader, EbuildQuote, \ - EbuildAssignment, EbuildNestedDie, EbuildUselessDodoc + EbuildAssignment, EbuildNestedDie, EbuildUselessDodoc, EbuildUselessCdS except ImportError: from os import path as osp sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), 'pym')) from repoman.checks import EbuildWhitespace, EbuildHeader, EbuildQuote, \ - EbuildAssignment, EbuildNestedDie, EbuildUselessDodoc + EbuildAssignment, EbuildNestedDie, EbuildUselessDodoc, EbuildUselessCdS try: import cStringIO as StringIO @@ -1371,7 +1371,7 @@ for x in scanlist: myear = time.gmtime(os.stat(path)[ST_MTIME])[0] contents = StringIO.StringIO(open(path, 'rb').read()) for check in (EbuildWhitespace, EbuildQuote, - EbuildAssignment, EbuildUselessDodoc): + EbuildAssignment, EbuildUselessDodoc, EbuildUselessCdS): c = check(contents) errors = c.Run() for e in errors: diff --git a/pym/repoman/checks.py b/pym/repoman/checks.py index 93c3222b3..eea7ba40f 100644 --- a/pym/repoman/checks.py +++ b/pym/repoman/checks.py @@ -9,7 +9,7 @@ import os from repoman.errors import COPYRIGHT_ERROR, LICENSE_ERROR, CVS_HEADER_ERROR, \ LEADING_SPACES_ERROR, READONLY_ASSIGNMENT_ERROR, TRAILING_WHITESPACE_ERROR, \ - MISSING_QUOTES_ERROR, NESTED_DIE_ERROR + MISSING_QUOTES_ERROR, NESTED_DIE_ERROR, REDUNDANT_CD_S_ERROR class ContentCheckException(Exception): @@ -243,3 +243,24 @@ class EbuildUselessDodoc(ContentCheck): errors.append((num + 1, "Useless dodoc '%s'" % \ (match.group(2), ) + " on line: %d")) return errors + +class EbuildUselessCdS(ContentCheck): + """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') + + def __init__(self, contents): + ContentCheck.__init__(self, 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, REDUNDANT_CD_S_ERROR)) + elif self.method_re.match(line): + check_next_line = True + return errors diff --git a/pym/repoman/errors.py b/pym/repoman/errors.py index 8378ed4d8..3b3b3c179 100644 --- a/pym/repoman/errors.py +++ b/pym/repoman/errors.py @@ -11,3 +11,4 @@ TRAILING_WHITESPACE_ERROR = 'Trailing whitespace error on line: %d' READONLY_ASSIGNMENT_ERROR = 'Ebuild contains assignment to read-only variable on line: %d' MISSING_QUOTES_ERROR = 'Unquoted Variable on line: %d' NESTED_DIE_ERROR = 'Ebuild calls die in a subshell' +REDUNDANT_CD_S_ERROR = 'Ebuild has redundant cd ${S} statement on line: %d' -- cgit v1.2.3-1-g7c22