Skip to content

Commit

Permalink
Add a presubmit check to prevent committing .rej/.orig patch files
Browse files Browse the repository at this point in the history
This is a follow-up to me having to remove some of these by hand in r171143.

R=maruel@chromium.org
NOTRY=true
BUG=none


Review URL: https://chromiumcodereview.appspot.com/11448014

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171287 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
enne@chromium.org committed Dec 5, 2012
1 parent b3cbad1 commit b8079ae
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
11 changes: 11 additions & 0 deletions PRESUBMIT.py
Original file line number Diff line number Diff line change
Expand Up @@ -669,6 +669,7 @@ def _CommonChecks(input_api, output_api):
results.extend(_CheckNoAuraWindowPropertyHInHeaders(input_api, output_api))
results.extend(_CheckIncludeOrder(input_api, output_api))
results.extend(_CheckForVersionControlConflicts(input_api, output_api))
results.extend(_CheckPatchFiles(input_api, output_api))

if any('PRESUBMIT.py' == f.LocalPath() for f in input_api.AffectedFiles()):
results.extend(input_api.canned_checks.RunUnitTestsInDirectory(
Expand Down Expand Up @@ -752,6 +753,16 @@ def _CheckAuthorizedAuthor(input_api, output_api):
return []


def _CheckPatchFiles(input_api, output_api):
problems = [f.LocalPath() for f in input_api.AffectedFiles()
if f.LocalPath().endswith(('.orig', '.rej'))]
if problems:
return [output_api.PresubmitError(
"Don't commit .rej and .orig files.", problems)]
else:
return []


def CheckChangeOnUpload(input_api, output_api):
results = []
results.extend(_CommonChecks(input_api, output_api))
Expand Down
59 changes: 59 additions & 0 deletions PRESUBMIT_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,27 @@ class MockInputApi(object):
def __init__(self):
self.re = re
self.os_path = os.path
self.files = []

def AffectedFiles(self):
return self.files


class MockOutputApi(object):
class PresubmitResult(object):
def __init__(self, message, items=None, long_text=''):
self.message = message
self.items = items
self.long_text = long_text

class PresubmitError(PresubmitResult):
pass

class PresubmitPromptWarning(PresubmitResult):
pass

class PresubmitNotifyResult(PresubmitResult):
pass


class MockFile(object):
Expand Down Expand Up @@ -201,5 +222,43 @@ def testTypicalConflict(self):
self.assertTrue('5' in errors[2])


class BadExtensionsTest(unittest.TestCase):
def testBadRejFile(self):
mock_input_api = MockInputApi()
mock_input_api.files = [
MockFile('some/path/foo.cc', ''),
MockFile('some/path/foo.cc.rej', ''),
MockFile('some/path2/bar.h.rej', ''),
]

results = PRESUBMIT._CheckPatchFiles(mock_input_api, MockOutputApi())
self.assertEqual(1, len(results))
self.assertEqual(2, len(results[0].items))
self.assertTrue('foo.cc.rej' in results[0].items[0])
self.assertTrue('bar.h.rej' in results[0].items[1])

def testBadOrigFile(self):
mock_input_api = MockInputApi()
mock_input_api.files = [
MockFile('other/path/qux.h.orig', ''),
MockFile('other/path/qux.h', ''),
MockFile('other/path/qux.cc', ''),
]

results = PRESUBMIT._CheckPatchFiles(mock_input_api, MockOutputApi())
self.assertEqual(1, len(results))
self.assertEqual(1, len(results[0].items))
self.assertTrue('qux.h.orig' in results[0].items[0])

def testGoodFiles(self):
mock_input_api = MockInputApi()
mock_input_api.files = [
MockFile('other/path/qux.h', ''),
MockFile('other/path/qux.cc', ''),
]
results = PRESUBMIT._CheckPatchFiles(mock_input_api, MockOutputApi())
self.assertEqual(0, len(results))


if __name__ == '__main__':
unittest.main()

0 comments on commit b8079ae

Please sign in to comment.