Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Unified Diff: PRESUBMIT.py

Issue 1342673002: Make PRESUBMIT.py run checks via 'pcg' if it is available in PATH. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pre-commit-go.yml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: PRESUBMIT.py
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 5ec715d255f389cd0b9653dd928d3c2e614b44d2..bb626f8b1c82f76700d33a8ffcefbf3624de1b82 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -1,21 +1,106 @@
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
+# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-"""Top-level presubmit script for client-go.
+"""Top-level presubmit script.
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
+See https://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
+details on the presubmit API built into depot_tools.
"""
+import os
+import sys
+
+
+def PreCommitGo(input_api, output_api, pcg_mode):
+ """Run go-specific checks via pre-commit-go (pcg) if it's in PATH."""
+ if input_api.is_committing:
+ error_type = output_api.PresubmitError
+ else:
+ error_type = output_api.PresubmitPromptWarning
+
+ exe = 'pcg.exe' if sys.platform == 'win32' else 'pcg'
+ pcg = None
+ for p in os.environ['PATH'].split(os.pathsep):
+ pcg = os.path.join(p, exe)
+ if os.access(pcg, os.X_OK):
+ break
+ else:
+ return [
+ error_type(
+ 'pre-commit-go executable (pcg) could not be found in PATH. All Go '
+ 'checks are skipped. See https://github.com/maruel/pre-commit-go.')
+ ]
+
+ # pcg can figure out what files to check on its own based on upstream ref.
+ cmd = [pcg, 'run', '-m', ','.join(pcg_mode)]
+ if input_api.verbose:
+ cmd.append('-v')
+ return input_api.RunTests([
+ input_api.Command(
+ name='pre-commit-go: %s' % ', '.join(pcg_mode),
+ cmd=cmd,
+ kwargs={},
+ message=error_type),
+ ])
+
+
+def header(input_api):
+ """Returns the expected license header regexp for this project."""
+ current_year = int(input_api.time.strftime('%Y'))
+ allowed_years = (str(s) for s in reversed(xrange(2011, current_year + 1)))
+ years_re = '(' + '|'.join(allowed_years) + ')'
+ license_header = (
+ r'.*? Copyright %(year)s The Chromium Authors\. '
M-A Ruel 2015/09/14 20:14:11 I think we should standardize to LUCI Authors ASAP
+ r'All rights reserved\.\n'
+ r'.*? Use of this source code is governed by a BSD-style license '
+ r'that can be\n'
+ r'.*? found in the LICENSE file\.(?: \*/)?\n'
+ ) % {
+ 'year': years_re,
+ }
+ return license_header
+
+
+def source_file_filter(input_api):
+ """Returns filter that selects source code files only."""
+ bl = list(input_api.DEFAULT_BLACK_LIST) + [
+ r'.+\.pb\.go$',
+ r'.+_string\.go$',
+ ]
+ wl = list(input_api.DEFAULT_WHITE_LIST) + [
+ r'.+\.go$',
+ ]
+ return lambda x: input_api.FilterSourceFile(x, white_list=wl, black_list=bl)
+
def CommonChecks(input_api, output_api):
- return []
+ results = []
+ results.extend(
+ input_api.canned_checks.CheckChangeHasNoStrayWhitespace(
+ input_api, output_api,
+ source_file_filter=source_file_filter(input_api)))
+ results.extend(
+ input_api.canned_checks.CheckLicense(
+ input_api, output_api, header(input_api),
+ source_file_filter=source_file_filter(input_api)))
+ return results
def CheckChangeOnUpload(input_api, output_api):
- return CommonChecks(input_api, output_api)
+ results = CommonChecks(input_api, output_api)
+ results.extend(PreCommitGo(input_api, output_api, ['lint', 'pre-commit']))
+ return results
def CheckChangeOnCommit(input_api, output_api):
- return CommonChecks(input_api, output_api)
+ results = CommonChecks(input_api, output_api)
+ results.extend(input_api.canned_checks.CheckChangeHasDescription(
+ input_api, output_api))
+ results.extend(input_api.canned_checks.CheckDoNotSubmitInDescription(
+ input_api, output_api))
+ results.extend(input_api.canned_checks.CheckDoNotSubmitInFiles(
+ input_api, output_api))
+ results.extend(PreCommitGo(
+ input_api, output_api, ['lint', 'pre-commit', 'pre-push']))
+ return results
« no previous file with comments | « no previous file | pre-commit-go.yml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698