Index: third_party/WebKit/Source/devtools/PRESUBMIT.py |
diff --git a/third_party/WebKit/Source/devtools/PRESUBMIT.py b/third_party/WebKit/Source/devtools/PRESUBMIT.py |
index 80789396046e679fc7a5d6db25daf8ba9d69a629..162369251e075a157e1f0363f845c0a68ec16e85 100644 |
--- a/third_party/WebKit/Source/devtools/PRESUBMIT.py |
+++ b/third_party/WebKit/Source/devtools/PRESUBMIT.py |
@@ -31,11 +31,8 @@ See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts |
for more details about the presubmit API built into gcl. |
""" |
-from collections import namedtuple |
import sys |
-CheckOutput = namedtuple('CheckOutput', ['results', 'has_errors']) |
- |
def _CheckNodeAndNPMModules(input_api, output_api): |
node_script_path = input_api.os_path.join(input_api.PresubmitLocalPath(), "scripts", "install_node_deps.py") |
@@ -43,14 +40,18 @@ def _CheckNodeAndNPMModules(input_api, output_api): |
[input_api.python_executable, node_script_path], stdout=input_api.subprocess.PIPE, stderr=input_api.subprocess.STDOUT) |
out, _ = process.communicate() |
if process.returncode != 0: |
- return CheckOutput([output_api.PresubmitError(out)], has_errors=True) |
- return CheckOutput([output_api.PresubmitNotifyResult(out)], has_errors=False) |
+ return [output_api.PresubmitError(out)] |
+ return [output_api.PresubmitNotifyResult(out)] |
+ |
+ |
+def _CheckFormat(input_api, output_api): |
+ def popen(args): |
+ return input_api.subprocess.Popen(args=args, stdout=input_api.subprocess.PIPE, stderr=input_api.subprocess.STDOUT) |
-def _FormatDevtools(input_api, output_api): |
affected_files = _getAffectedJSFiles(input_api) |
if len(affected_files) == 0: |
- return CheckOutput([], has_errors=False) |
+ return [] |
original_sys_path = sys.path |
try: |
sys.path = sys.path + [input_api.os_path.join(input_api.PresubmitLocalPath(), "scripts")] |
@@ -59,39 +60,34 @@ def _FormatDevtools(input_api, output_api): |
sys.path = original_sys_path |
node_path, _ = install_node_deps.resolve_node_paths() |
- format_path = input_api.os_path.join(input_api.PresubmitLocalPath(), "scripts", "format.js") |
- glob_arg = "--glob=" + ",".join(affected_files) |
- check_formatting_process = _inputPopen(input_api, args=[node_path, format_path] + [glob_arg, "--output-replacements-xml"]) |
- check_formatting_out, _ = check_formatting_process.communicate() |
- if check_formatting_process.returncode != 0: |
- return CheckOutput([output_api.PresubmitError(check_formatting_out)], has_errors=True) |
- if "</replacement>" not in check_formatting_out: |
- return CheckOutput([output_api.PresubmitNotifyResult("CL is properly formatted")], has_errors=False) |
- |
- format_args = [node_path, format_path] + [glob_arg] |
- format_process = _inputPopen(input_api, format_args) |
- format_process_out, _ = format_process.communicate() |
+ |
+ check_formatting_process = popen(['git', 'cl', 'format', '--js', '--dry-run', input_api.PresubmitLocalPath()]) |
+ check_formatting_process.communicate() |
+ if check_formatting_process.returncode == 0: |
+ return [] |
+ |
+ format_args = ['git', 'cl', 'format', '--js', input_api.PresubmitLocalPath()] |
+ format_process = popen(format_args) |
+ format_out, _ = format_process.communicate() |
+ if format_process.returncode != 0: |
+ return [output_api.PresubmitError(format_out)] |
# Use eslint to autofix the braces |
eslint_path = input_api.os_path.join(input_api.PresubmitLocalPath(), "node_modules", ".bin", "eslint") |
- eslint_process = _inputPopen( |
- input_api, |
- [node_path, eslint_path, '--no-eslintrc', '--fix', '--env=es6', '--rule={"curly": [2, "multi-or-nest", "consistent"]}'] + |
- affected_files) |
+ eslint_process = popen([ |
+ node_path, eslint_path, '--no-eslintrc', '--fix', '--env=es6', '--rule={"curly": [2, "multi-or-nest", "consistent"]}' |
+ ] + affected_files) |
eslint_process.communicate() |
# Need to run clang-format again to align the braces |
- reformat_process = _inputPopen(input_api, format_args) |
- reformat_process.communicate() |
+ popen(format_args).communicate() |
- return CheckOutput( |
- [ |
- output_api.PresubmitError("ERROR: Found formatting violations.\n" |
- "Ran clang-format on files changed in CL\n" |
- "Use git status to check the formatting changes"), |
- output_api.PresubmitError(format_process_out) |
- ], |
- has_errors=True) |
+ return [ |
+ output_api.PresubmitError("ERROR: Found formatting violations in third_party/WebKit/Source/devtools.\n" |
+ "Ran clang-format on diff\n" |
+ "Use git status to check the formatting changes"), |
+ output_api.PresubmitError(format_out), |
+ ] |
def _CheckDevtoolsStyle(input_api, output_api): |
@@ -188,19 +184,8 @@ def _CheckCSSViolations(input_api, output_api): |
def CheckChangeOnUpload(input_api, output_api): |
results = [] |
- |
- (node_results, has_errors) = _CheckNodeAndNPMModules(input_api, output_api) |
- results.extend(node_results) |
- if has_errors: |
- results.append(output_api.PresubmitError("ERROR: Bailed out early because error using node.js/npm")) |
- return results |
- |
- (format_results, has_errors) = _FormatDevtools(input_api, output_api) |
- results.extend(format_results) |
- if has_errors: |
- results.append(output_api.PresubmitError("ERROR: Bailed out early because formatting errors were found")) |
- return results |
- |
+ results.extend(_CheckNodeAndNPMModules(input_api, output_api)) |
+ results.extend(_CheckFormat(input_api, output_api)) |
results.extend(_CheckDevtoolsStyle(input_api, output_api)) |
results.extend(_CompileDevtoolsFrontend(input_api, output_api)) |
results.extend(_CheckConvertSVGToPNGHashes(input_api, output_api)) |
@@ -233,7 +218,3 @@ def _getAffectedJSFiles(input_api): |
if (devtools_front_end in file_name or devtools_scripts in file_name) and file_name.endswith(".js") |
] |
return [input_api.os_path.relpath(file_name, devtools_root) for file_name in affected_js_files] |
- |
- |
-def _inputPopen(input_api, args): |
- return input_api.subprocess.Popen(args, stdout=input_api.subprocess.PIPE, stderr=input_api.subprocess.STDOUT) |