Add canned presubmit check for GN formatting
Requires https://codereview.chromium.org/779883002/ to be landed/rolled before it's useful.
R=dpranke@chromium.org
BUG=348474
Review URL: https://codereview.chromium.org/779513005
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@293269 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gn.py b/gn.py
index 325e685..7837dbd 100755
--- a/gn.py
+++ b/gn.py
@@ -30,7 +30,7 @@
print >> sys.stderr, 'gn.py: Could not find gn executable at: %s' % gn_path
return 2
else:
- return subprocess.call([gn_path] + sys.argv[1:])
+ return subprocess.call([gn_path] + args[1:])
if __name__ == '__main__':
diff --git a/presubmit_canned_checks.py b/presubmit_canned_checks.py
index 05b045d..a93a4fd 100644
--- a/presubmit_canned_checks.py
+++ b/presubmit_canned_checks.py
@@ -1113,3 +1113,22 @@
# As this is just a warning, ignore all other errors if the user
# happens to have a broken clang-format, doesn't use git, etc etc.
return []
+
+
+def CheckGNFormatted(input_api, output_api):
+ import gn
+ affected_files = input_api.AffectedFiles(
+ include_deletes=False,
+ file_filter=lambda x: x.LocalPath().endswith('.gn') or
+ x.LocalPath().endswith('.gni'))
+ warnings = []
+ for f in affected_files:
+ cmd = ['gn', 'format', '--dry-run', f.AbsoluteLocalPath()]
+ rc = gn.main(cmd)
+ if rc == 2:
+ warnings.append(output_api.PresubmitPromptWarning(
+ '%s requires formatting. Please run `gn format --in-place %s`.' % (
+ f.AbsoluteLocalPath(), f.LocalPath())))
+ # It's just a warning, so ignore other types of failures assuming they'll be
+ # caught elsewhere.
+ return warnings
diff --git a/tests/presubmit_unittest.py b/tests/presubmit_unittest.py
index 9df0b83..5937080 100755
--- a/tests/presubmit_unittest.py
+++ b/tests/presubmit_unittest.py
@@ -1878,6 +1878,7 @@
'CheckLicense',
'CheckOwners',
'CheckPatchFormatted',
+ 'CheckGNFormatted',
'CheckRietveldTryJobExecution',
'CheckSingletonInHeaders',
'CheckSvnModifiedDirectories',