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

Side by Side Diff: presubmit_support.py

Issue 112503005: Have presubmit.py accept an option to output trybot data as json. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Address maruel's nits. Created 6 years, 11 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Enables directory-specific presubmit checks to run at upload and/or commit. 6 """Enables directory-specific presubmit checks to run at upload and/or commit.
7 """ 7 """
8 8
9 __version__ = '1.7.0' 9 __version__ = '1.8.0'
10 10
11 # TODO(joi) Add caching where appropriate/needed. The API is designed to allow 11 # TODO(joi) Add caching where appropriate/needed. The API is designed to allow
12 # caching (between all different invocations of presubmit scripts for a given 12 # caching (between all different invocations of presubmit scripts for a given
13 # change). We should add it as our presubmit scripts start feeling slow. 13 # change). We should add it as our presubmit scripts start feeling slow.
14 14
15 import cpplint 15 import cpplint
16 import cPickle # Exposed through the API. 16 import cPickle # Exposed through the API.
17 import cStringIO # Exposed through the API. 17 import cStringIO # Exposed through the API.
18 import contextlib 18 import contextlib
19 import fnmatch 19 import fnmatch
(...skipping 1403 matching lines...) Expand 10 before | Expand all | Expand 10 after
1423 parser.add_option("--may_prompt", action='store_true', default=False) 1423 parser.add_option("--may_prompt", action='store_true', default=False)
1424 parser.add_option("--skip_canned", action='append', default=[], 1424 parser.add_option("--skip_canned", action='append', default=[],
1425 help="A list of checks to skip which appear in " 1425 help="A list of checks to skip which appear in "
1426 "presubmit_canned_checks. Can be provided multiple times " 1426 "presubmit_canned_checks. Can be provided multiple times "
1427 "to skip multiple canned checks.") 1427 "to skip multiple canned checks.")
1428 parser.add_option("--rietveld_url", help=optparse.SUPPRESS_HELP) 1428 parser.add_option("--rietveld_url", help=optparse.SUPPRESS_HELP)
1429 parser.add_option("--rietveld_email", help=optparse.SUPPRESS_HELP) 1429 parser.add_option("--rietveld_email", help=optparse.SUPPRESS_HELP)
1430 parser.add_option("--rietveld_password", help=optparse.SUPPRESS_HELP) 1430 parser.add_option("--rietveld_password", help=optparse.SUPPRESS_HELP)
1431 parser.add_option("--rietveld_fetch", action='store_true', default=False, 1431 parser.add_option("--rietveld_fetch", action='store_true', default=False,
1432 help=optparse.SUPPRESS_HELP) 1432 help=optparse.SUPPRESS_HELP)
1433 parser.add_option("--trybot-json",
1434 help="Output trybot information to the file specified.")
1433 options, args = parser.parse_args(argv) 1435 options, args = parser.parse_args(argv)
1434 if options.verbose >= 2: 1436 if options.verbose >= 2:
1435 logging.basicConfig(level=logging.DEBUG) 1437 logging.basicConfig(level=logging.DEBUG)
1436 elif options.verbose: 1438 elif options.verbose:
1437 logging.basicConfig(level=logging.INFO) 1439 logging.basicConfig(level=logging.INFO)
1438 else: 1440 else:
1439 logging.basicConfig(level=logging.ERROR) 1441 logging.basicConfig(level=logging.ERROR)
1440 change_class, files = load_files(options, args) 1442 change_class, files = load_files(options, args)
1441 if not change_class: 1443 if not change_class:
1442 parser.error('For unversioned directory, <files> is not optional.') 1444 parser.error('For unversioned directory, <files> is not optional.')
1443 logging.info('Found %d file(s).' % len(files)) 1445 logging.info('Found %d file(s).' % len(files))
1444 rietveld_obj = None 1446 rietveld_obj = None
1445 if options.rietveld_url: 1447 if options.rietveld_url:
1446 rietveld_obj = rietveld.CachingRietveld( 1448 rietveld_obj = rietveld.CachingRietveld(
1447 options.rietveld_url, 1449 options.rietveld_url,
1448 options.rietveld_email, 1450 options.rietveld_email,
1449 options.rietveld_password) 1451 options.rietveld_password)
1450 if options.rietveld_fetch: 1452 if options.rietveld_fetch:
1451 assert options.issue 1453 assert options.issue
1452 props = rietveld_obj.get_issue_properties(options.issue, False) 1454 props = rietveld_obj.get_issue_properties(options.issue, False)
1453 options.author = props['owner_email'] 1455 options.author = props['owner_email']
1454 options.description = props['description'] 1456 options.description = props['description']
1455 logging.info('Got author: "%s"', options.author) 1457 logging.info('Got author: "%s"', options.author)
1456 logging.info('Got description: """\n%s\n"""', options.description) 1458 logging.info('Got description: """\n%s\n"""', options.description)
1459 if options.trybot_json:
1460 with open(options.trybot_json, 'w') as f:
1461 # Python's sets aren't JSON-encodable, so we convert them to lists here.
1462 class SetEncoder(json.JSONEncoder):
1463 # pylint: disable=E0202
1464 def default(self, obj):
1465 if isinstance(obj, set):
1466 return sorted(obj)
1467 return json.JSONEncoder.default(self, obj)
1468 change = change_class(options.name,
1469 options.description,
1470 options.root,
1471 files,
1472 options.issue,
1473 options.patchset,
1474 options.author)
1475 trybots = DoGetTrySlaves(
1476 change,
1477 change.LocalPaths(),
1478 change.RepositoryRoot(),
1479 None,
1480 None,
1481 options.verbose,
1482 sys.stdout)
1483 json.dump(trybots, f, cls=SetEncoder)
1457 try: 1484 try:
1458 with canned_check_filter(options.skip_canned): 1485 with canned_check_filter(options.skip_canned):
1459 results = DoPresubmitChecks( 1486 results = DoPresubmitChecks(
1460 change_class(options.name, 1487 change_class(options.name,
1461 options.description, 1488 options.description,
1462 options.root, 1489 options.root,
1463 files, 1490 files,
1464 options.issue, 1491 options.issue,
1465 options.patchset, 1492 options.patchset,
1466 options.author), 1493 options.author),
(...skipping 12 matching lines...) Expand all
1479 except PresubmitFailure, e: 1506 except PresubmitFailure, e:
1480 print >> sys.stderr, e 1507 print >> sys.stderr, e
1481 print >> sys.stderr, 'Maybe your depot_tools is out of date?' 1508 print >> sys.stderr, 'Maybe your depot_tools is out of date?'
1482 print >> sys.stderr, 'If all fails, contact maruel@' 1509 print >> sys.stderr, 'If all fails, contact maruel@'
1483 return 2 1510 return 2
1484 1511
1485 1512
1486 if __name__ == '__main__': 1513 if __name__ == '__main__':
1487 fix_encoding.fix_encoding() 1514 fix_encoding.fix_encoding()
1488 sys.exit(Main(None)) 1515 sys.exit(Main(None))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698