Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # | 2 # |
| 3 # Copyright 2012 the V8 project authors. All rights reserved. | 3 # Copyright 2012 the V8 project authors. All rights reserved. |
| 4 # Redistribution and use in source and binary forms, with or without | 4 # Redistribution and use in source and binary forms, with or without |
| 5 # modification, are permitted provided that the following conditions are | 5 # modification, are permitted provided that the following conditions are |
| 6 # met: | 6 # met: |
| 7 # | 7 # |
| 8 # * Redistributions of source code must retain the above copyright | 8 # * Redistributions of source code must retain the above copyright |
| 9 # notice, this list of conditions and the following disclaimer. | 9 # notice, this list of conditions and the following disclaimer. |
| 10 # * Redistributions in binary form must reproduce the above | 10 # * Redistributions in binary form must reproduce the above |
| (...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 431 code = subprocess.call( | 431 code = subprocess.call( |
| 432 [sys.executable, join(workspace, "tools", "check-name-clashes.py")]) | 432 [sys.executable, join(workspace, "tools", "check-name-clashes.py")]) |
| 433 return code == 0 | 433 return code == 0 |
| 434 | 434 |
| 435 | 435 |
| 436 def CheckExternalReferenceRegistration(workspace): | 436 def CheckExternalReferenceRegistration(workspace): |
| 437 code = subprocess.call( | 437 code = subprocess.call( |
| 438 [sys.executable, join(workspace, "tools", "external-reference-check.py")]) | 438 [sys.executable, join(workspace, "tools", "external-reference-check.py")]) |
| 439 return code == 0 | 439 return code == 0 |
| 440 | 440 |
| 441 def CheckAuthorizedAuthor(input_api, output_api): | |
| 442 """For non-googler/chromites committers, verify the author's email address is | |
| 443 in AUTHORS. | |
| 444 """ | |
| 445 # TODO(maruel): Add it to input_api? | |
| 446 import fnmatch | |
| 447 | |
| 448 author = input_api.change.author_email | |
| 449 if not author: | |
| 450 input_api.logging.info('No author, skipping AUTHOR check') | |
| 451 return [] | |
| 452 authors_path = input_api.os_path.join( | |
| 453 input_api.PresubmitLocalPath(), 'AUTHORS') | |
| 454 valid_authors = ( | |
| 455 input_api.re.match(r'[^#]+\s+\<(.+?)\>\s*$', line) | |
| 456 for line in open(authors_path)) | |
| 457 valid_authors = [item.group(1).lower() for item in valid_authors if item] | |
| 458 if not any(fnmatch.fnmatch(author.lower(), valid) for valid in valid_authors): | |
| 459 input_api.logging.info('Valid authors are %s', ', '.join(valid_authors)) | |
| 460 return [output_api.PresubmitPromptWarning( | |
|
Michael Achenbach
2015/01/15 12:29:22
I assume a warning is enough to bail out?
marja
2015/01/15 12:37:39
It's a prompt warning, so it'll prompt the user an
| |
| 461 ('%s is not in AUTHORS file. If you are a new contributor, please visit' | |
| 462 '\n' | |
| 463 'http://www.chromium.org/developers/contributing-code and read the ' | |
| 464 '"Legal" section\n' | |
| 465 'If you are a chromite, verify the contributor signed the CLA.') % | |
| 466 author)] | |
| 467 return [] | |
| 441 | 468 |
| 442 def GetOptions(): | 469 def GetOptions(): |
| 443 result = optparse.OptionParser() | 470 result = optparse.OptionParser() |
| 444 result.add_option('--no-lint', help="Do not run cpplint", default=False, | 471 result.add_option('--no-lint', help="Do not run cpplint", default=False, |
| 445 action="store_true") | 472 action="store_true") |
| 446 return result | 473 return result |
| 447 | 474 |
| 448 | 475 |
| 449 def Main(): | 476 def Main(): |
| 450 workspace = abspath(join(dirname(sys.argv[0]), '..')) | 477 workspace = abspath(join(dirname(sys.argv[0]), '..')) |
| 451 parser = GetOptions() | 478 parser = GetOptions() |
| 452 (options, args) = parser.parse_args() | 479 (options, args) = parser.parse_args() |
| 453 success = True | 480 success = True |
| 454 print "Running C++ lint check..." | 481 print "Running C++ lint check..." |
| 455 if not options.no_lint: | 482 if not options.no_lint: |
| 456 success = CppLintProcessor().Run(workspace) and success | 483 success = CppLintProcessor().Run(workspace) and success |
| 457 print "Running copyright header, trailing whitespaces and " \ | 484 print "Running copyright header, trailing whitespaces and " \ |
| 458 "two empty lines between declarations check..." | 485 "two empty lines between declarations check..." |
| 459 success = SourceProcessor().Run(workspace) and success | 486 success = SourceProcessor().Run(workspace) and success |
| 460 success = CheckRuntimeVsNativesNameClashes(workspace) and success | 487 success = CheckRuntimeVsNativesNameClashes(workspace) and success |
| 461 success = CheckExternalReferenceRegistration(workspace) and success | 488 success = CheckExternalReferenceRegistration(workspace) and success |
| 462 if success: | 489 if success: |
| 463 return 0 | 490 return 0 |
| 464 else: | 491 else: |
| 465 return 1 | 492 return 1 |
| 466 | 493 |
| 467 | 494 |
| 468 if __name__ == '__main__': | 495 if __name__ == '__main__': |
| 469 sys.exit(Main()) | 496 sys.exit(Main()) |
| OLD | NEW |