Index: l2tdevtools/helpers/review.py |
diff --git a/l2tdevtools/helpers/review.py b/l2tdevtools/helpers/review.py |
index a72894f30d1a61f20205a8aae26c5c8e8aebcaf8..0a9584b669cca8bd4c3b08f337cc2e1cfd81f1fc 100644 |
--- a/l2tdevtools/helpers/review.py |
+++ b/l2tdevtools/helpers/review.py |
@@ -15,6 +15,7 @@ from l2tdevtools.helpers import pylint |
from l2tdevtools.helpers import readthedocs |
from l2tdevtools.helpers import sphinxapi |
from l2tdevtools.helpers import upload |
+from l2tdevtools.helpers import yapf |
from l2tdevtools.helpers import git |
from l2tdevtools.lib import netrcfile |
@@ -28,6 +29,10 @@ class ReviewHelper(object): |
r'\[({0:s})\] '.format( |
'|'.join(projects.ProjectsHelper.SUPPORTED_PROJECTS))) |
+ # Commands that trigger inspection (pylint, yapf) of changed files. |
+ _CODE_INSPECTION_COMMANDS = frozenset( |
+ ['create', 'merge', 'lint', 'lint-test', 'lint_test', 'update']) |
+ |
def __init__( |
self, command, project_path, github_origin, feature_branch, diffbase, |
all_files=False, no_browser=False, no_confirm=False): # yapf: disable |
@@ -194,9 +199,9 @@ class ReviewHelper(object): |
if not self._codereview_helper.CloseIssue(codereview_issue_number): |
print('Unable to close code review: {0!s}'.format( |
codereview_issue_number)) # yapf: disable |
- print(( |
- 'Close it manually on: https://codereview.appspot.com/' |
- '{0!s}').format(codereview_issue_number)) |
+ print( |
+ ('Close it manually on: https://codereview.appspot.com/' |
+ '{0!s}').format(codereview_issue_number)) |
return True |
@@ -362,7 +367,7 @@ class ReviewHelper(object): |
self._sphinxapidoc_helper = sphinxapi.SphinxAPIDocHelper( |
self._project_name) |
# TODO: disable the version check for now since sphinx-apidoc 1.2.2 |
- # on Unbuntu 14.04 does not have the --version option. Re-enable when |
+ # on Ubuntu 14.04 does not have the --version option. Re-enable when |
# sphinx-apidoc 1.2.3 or later is introduced. |
# if not self._sphinxapidoc_helper.CheckUpToDateVersion(): |
# print(( |
@@ -372,6 +377,47 @@ class ReviewHelper(object): |
return True |
+ def CheckStyle(self): |
+ """Checks the code style of a change. |
+ |
+ Returns: |
+ bool: True if the code style check was successful or no style was defined. |
+ """ |
+ yapf_helper = yapf.YAPFHelper() |
+ configuration = yapf_helper.GetStyleConfig(self._project_path) |
+ if not configuration: |
+ return True |
+ |
+ if self._command not in self._CODE_INSPECTION_COMMANDS: |
+ return True |
+ |
+ if not yapf_helper.CheckUpToDateVersion(): |
+ message = '{0:s} aborted - yapf version {1:s} or later required.'.format( |
+ self._command.title(), pylint.PylintHelper.MINIMUM_VERSION) |
+ print(message) |
+ return False |
+ |
+ if self._all_files: |
+ diffbase = None |
+ elif self._command == 'merge': |
+ diffbase = 'origin/master' |
+ else: |
+ diffbase = self._diffbase |
+ |
+ changed_python_files = self._git_helper.GetChangedPythonFiles( |
+ diffbase=diffbase) |
+ |
+ if not yapf_helper.CheckFiles(changed_python_files, configuration): |
+ message = '{0:s} aborted - unable to pass style inspection.'.format( |
+ self._command.title()) |
+ print(message) |
+ |
+ if self._command == 'merge': |
+ self._git_helper.DropUncommittedChanges() |
+ return False |
+ |
+ return True |
+ |
# yapf: disable |
def Lint(self): |
"""Lints a review. |
@@ -382,9 +428,7 @@ class ReviewHelper(object): |
if self._project_name == 'l2tdocs': |
return True |
- if self._command not in ( |
- 'create', 'create-pr', 'create_pr', 'merge', 'lint', 'lint-test', |
- 'lint_test', 'update'): |
+ if self._command not in self._CODE_INSPECTION_COMMANDS: |
return True |
pylint_helper = pylint.PylintHelper() |
@@ -455,8 +499,7 @@ class ReviewHelper(object): |
commit_message = ( |
'Changes have been merged with master branch. ' |
'To close the review and clean up the feature branch you can run: ' |
- 'review.py close {0:s}' |
- ).format(self._fork_feature_branch) |
+ 'review.py close {0:s}').format(self._fork_feature_branch) |
self._codereview_helper.AddMergeMessage( |
codereview_issue_number, commit_message) |
@@ -632,6 +675,7 @@ class ReviewHelper(object): |
else: |
description = user_input |
+ # yapf: disable |
if not self._codereview_helper.UpdateIssue( |
self._codereview_issue_number, self._diffbase, description): |
print('Unable to update code review: {0!s}'.format( |
@@ -639,6 +683,7 @@ class ReviewHelper(object): |
return False |
return True |
+ # yapf: enable |
def UpdateAuthors(self): |
"""Updates the authors. |