PRESUBMIT: Add check for JSON parse errors + fix JSON
The PRESUBMIT code is basically a stripped-down copy of the code in
Chromium's src/PRESUBMIT.py.
BUG=chromium:498746
TESTED=I verified with 'git cl presubmit' that the existing
error was found. Then I ran it again after fixing it, with
presubmit passing.
NOTRY=True
Review URL: https://codereview.webrtc.org/1682393002
Cr-Commit-Position: refs/heads/master@{#11572}
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 7388cf8..24a5034 100755
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -339,6 +339,31 @@
return results
+def _CheckJSONParseErrors(input_api, output_api):
+ """Check that JSON files do not contain syntax errors."""
+
+ def FilterFile(affected_file):
+ return input_api.os_path.splitext(affected_file.LocalPath())[1] == '.json'
+
+ def GetJSONParseError(input_api, filename):
+ try:
+ contents = input_api.ReadFile(filename)
+ input_api.json.loads(contents)
+ except ValueError as e:
+ return e
+ return None
+
+ results = []
+ for affected_file in input_api.AffectedFiles(
+ file_filter=FilterFile, include_deletes=False):
+ parse_error = GetJSONParseError(input_api,
+ affected_file.AbsoluteLocalPath())
+ if parse_error:
+ results.append(output_api.PresubmitError('%s could not be parsed: %s' %
+ (affected_file.LocalPath(), parse_error)))
+ return results
+
+
def _RunPythonTests(input_api, output_api):
def join(*args):
return input_api.os_path.join(input_api.PresubmitLocalPath(), *args)
@@ -403,6 +428,7 @@
'W0232', # Class has no __init__ method
],
pylintrc='pylintrc'))
+
# WebRTC can't use the presubmit_canned_checks.PanProjectChecks function since
# we need to have different license checks in talk/ and webrtc/ directories.
# Instead, hand-picked checks are included below.
@@ -423,6 +449,7 @@
results.extend(_CheckNoFRIEND_TEST(input_api, output_api))
results.extend(_CheckGypChanges(input_api, output_api))
results.extend(_CheckUnwantedDependencies(input_api, output_api))
+ results.extend(_CheckJSONParseErrors(input_api, output_api))
results.extend(_RunPythonTests(input_api, output_api))
return results