Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Top-level presubmit script for client-go. | 5 """Top-level presubmit script. |
| 6 | 6 |
| 7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for | 7 See https://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for |
| 8 details on the presubmit API built into gcl. | 8 details on the presubmit API built into depot_tools. |
| 9 """ | 9 """ |
| 10 | 10 |
| 11 import os | |
| 12 import sys | |
| 13 | |
| 14 | |
| 15 def PreCommitGo(input_api, output_api, pcg_mode): | |
| 16 """Run go-specific checks via pre-commit-go (pcg) if it's in PATH.""" | |
| 17 if input_api.is_committing: | |
| 18 error_type = output_api.PresubmitError | |
| 19 else: | |
| 20 error_type = output_api.PresubmitPromptWarning | |
| 21 | |
| 22 exe = 'pcg.exe' if sys.platform == 'win32' else 'pcg' | |
| 23 pcg = None | |
| 24 for p in os.environ['PATH'].split(os.pathsep): | |
| 25 pcg = os.path.join(p, exe) | |
| 26 if os.access(pcg, os.X_OK): | |
| 27 break | |
| 28 else: | |
| 29 return [ | |
| 30 error_type( | |
| 31 'pre-commit-go executable (pcg) could not be found in PATH. All Go ' | |
| 32 'checks are skipped. See https://github.com/maruel/pre-commit-go.') | |
| 33 ] | |
| 34 | |
| 35 # pcg can figure out what files to check on its own based on upstream ref. | |
| 36 cmd = [pcg, 'run', '-m', ','.join(pcg_mode)] | |
| 37 if input_api.verbose: | |
| 38 cmd.append('-v') | |
| 39 return input_api.RunTests([ | |
| 40 input_api.Command( | |
| 41 name='pre-commit-go: %s' % ', '.join(pcg_mode), | |
| 42 cmd=cmd, | |
| 43 kwargs={}, | |
| 44 message=error_type), | |
| 45 ]) | |
| 46 | |
| 47 | |
| 48 def header(input_api): | |
| 49 """Returns the expected license header regexp for this project.""" | |
| 50 current_year = int(input_api.time.strftime('%Y')) | |
| 51 allowed_years = (str(s) for s in reversed(xrange(2011, current_year + 1))) | |
| 52 years_re = '(' + '|'.join(allowed_years) + ')' | |
| 53 license_header = ( | |
| 54 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
| |
| 55 r'All rights reserved\.\n' | |
| 56 r'.*? Use of this source code is governed by a BSD-style license ' | |
| 57 r'that can be\n' | |
| 58 r'.*? found in the LICENSE file\.(?: \*/)?\n' | |
| 59 ) % { | |
| 60 'year': years_re, | |
| 61 } | |
| 62 return license_header | |
| 63 | |
| 64 | |
| 65 def source_file_filter(input_api): | |
| 66 """Returns filter that selects source code files only.""" | |
| 67 bl = list(input_api.DEFAULT_BLACK_LIST) + [ | |
| 68 r'.+\.pb\.go$', | |
| 69 r'.+_string\.go$', | |
| 70 ] | |
| 71 wl = list(input_api.DEFAULT_WHITE_LIST) + [ | |
| 72 r'.+\.go$', | |
| 73 ] | |
| 74 return lambda x: input_api.FilterSourceFile(x, white_list=wl, black_list=bl) | |
| 75 | |
| 11 | 76 |
| 12 def CommonChecks(input_api, output_api): | 77 def CommonChecks(input_api, output_api): |
| 13 return [] | 78 results = [] |
| 79 results.extend( | |
| 80 input_api.canned_checks.CheckChangeHasNoStrayWhitespace( | |
| 81 input_api, output_api, | |
| 82 source_file_filter=source_file_filter(input_api))) | |
| 83 results.extend( | |
| 84 input_api.canned_checks.CheckLicense( | |
| 85 input_api, output_api, header(input_api), | |
| 86 source_file_filter=source_file_filter(input_api))) | |
| 87 return results | |
| 14 | 88 |
| 15 | 89 |
| 16 def CheckChangeOnUpload(input_api, output_api): | 90 def CheckChangeOnUpload(input_api, output_api): |
| 17 return CommonChecks(input_api, output_api) | 91 results = CommonChecks(input_api, output_api) |
| 92 results.extend(PreCommitGo(input_api, output_api, ['lint', 'pre-commit'])) | |
| 93 return results | |
| 18 | 94 |
| 19 | 95 |
| 20 def CheckChangeOnCommit(input_api, output_api): | 96 def CheckChangeOnCommit(input_api, output_api): |
| 21 return CommonChecks(input_api, output_api) | 97 results = CommonChecks(input_api, output_api) |
| 98 results.extend(input_api.canned_checks.CheckChangeHasDescription( | |
| 99 input_api, output_api)) | |
| 100 results.extend(input_api.canned_checks.CheckDoNotSubmitInDescription( | |
| 101 input_api, output_api)) | |
| 102 results.extend(input_api.canned_checks.CheckDoNotSubmitInFiles( | |
| 103 input_api, output_api)) | |
| 104 results.extend(PreCommitGo( | |
| 105 input_api, output_api, ['lint', 'pre-commit', 'pre-push'])) | |
| 106 return results | |
| OLD | NEW |