diff --git a/tools/checkstyle/checkstyle.py b/tools/checkstyle/checkstyle.py index 52f5e36a28c..4ea2c6aa23a 100755 --- a/tools/checkstyle/checkstyle.py +++ b/tools/checkstyle/checkstyle.py @@ -73,11 +73,12 @@ def RunCheckstyleOnACommit(commit, config_xml=CHECKSTYLE_STYLE): Returns: A tuple of errors and warnings. """ - if not commit: + explicit_commit = commit is not None + if not explicit_commit: _WarnIfUntrackedFiles() commit = git.last_commit() print 'Running Checkstyle on %s commit' % commit - commit_modified_files = _GetModifiedFiles(commit) + commit_modified_files = _GetModifiedFiles(commit, explicit_commit) if not commit_modified_files.keys(): print 'No Java files to check' return [], [] @@ -216,10 +217,10 @@ def _ShouldSkip(commit_check, modified_lines, line, rule, test_class=False): return line not in modified_lines and rule not in FORCED_RULES -def _GetModifiedFiles(commit, out=sys.stdout): +def _GetModifiedFiles(commit, explicit_commit=False, out=sys.stdout): root = git.repository_root() pending_files = git.modified_files(root, True) - if pending_files: + if pending_files and not explicit_commit: out.write(ERROR_UNCOMMITTED) sys.exit(1) diff --git a/tools/checkstyle/tests.py b/tools/checkstyle/tests.py index 6463127d77c..28e200bfafe 100755 --- a/tools/checkstyle/tests.py +++ b/tools/checkstyle/tests.py @@ -122,6 +122,14 @@ def test_GetModifiedFilesUncommitted(self): checkstyle._GetModifiedFiles(mock_last_commit(), out=out) self.assertEqual(out.getvalue(), checkstyle.ERROR_UNCOMMITTED) + def test_GetModifiedFilesUncommittedExplicitCommit(self): + checkstyle.git.modified_files = mock_modified_files_uncommitted + out = StringIO() + files = checkstyle._GetModifiedFiles(mock_last_commit(), True, out=out) + output = out.getvalue() + self.assertEqual(output, '') + self.assertEqual(files, {TEST_FILE1: FILE_MODIFIED, TEST_FILE2: FILE_ADDED}) + def test_GetModifiedFilesNonJava(self): checkstyle.git.modified_files = mock_modified_files_non_java out = StringIO()