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

Side by Side Diff: git_cl.py

Issue 2263103002: git cl issue: add --json switch for machine-readable output (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: tests Created 4 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | tests/git_cl_test.py » ('j') | 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 # Copyright (C) 2008 Evan Martin <martine@danga.com> 6 # Copyright (C) 2008 Evan Martin <martine@danga.com>
7 7
8 """A git-command for integrating reviews on Rietveld and Gerrit.""" 8 """A git-command for integrating reviews on Rietveld and Gerrit."""
9 9
10 from __future__ import print_function 10 from __future__ import print_function
(...skipping 3428 matching lines...) Expand 10 before | Expand all | Expand 10 after
3439 if color in line.upper(): 3439 if color in line.upper():
3440 # Extract whitespaces first and the leading '-'. 3440 # Extract whitespaces first and the leading '-'.
3441 indent = len(line) - len(line.lstrip(' ')) + 1 3441 indent = len(line) - len(line.lstrip(' ')) + 1
3442 return line[:indent] + getattr(Fore, color) + line[indent:] + Fore.RESET 3442 return line[:indent] + getattr(Fore, color) + line[indent:] + Fore.RESET
3443 return line 3443 return line
3444 3444
3445 lines = CMDstatus.__doc__.splitlines() 3445 lines = CMDstatus.__doc__.splitlines()
3446 CMDstatus.__doc__ = '\n'.join(colorize_line(l) for l in lines) 3446 CMDstatus.__doc__ = '\n'.join(colorize_line(l) for l in lines)
3447 3447
3448 3448
3449 def write_json(path, contents):
3450 with open(path, 'w') as f:
3451 json.dump(contents, f)
3452
3453
3449 @subcommand.usage('[issue_number]') 3454 @subcommand.usage('[issue_number]')
3450 def CMDissue(parser, args): 3455 def CMDissue(parser, args):
3451 """Sets or displays the current code review issue number. 3456 """Sets or displays the current code review issue number.
3452 3457
3453 Pass issue number 0 to clear the current issue. 3458 Pass issue number 0 to clear the current issue.
3454 """ 3459 """
3455 parser.add_option('-r', '--reverse', action='store_true', 3460 parser.add_option('-r', '--reverse', action='store_true',
3456 help='Lookup the branch(es) for the specified issues. If ' 3461 help='Lookup the branch(es) for the specified issues. If '
3457 'no issues are specified, all branches with mapped ' 3462 'no issues are specified, all branches with mapped '
3458 'issues will be listed.') 3463 'issues will be listed.')
3464 parser.add_option('--json', help='Path to JSON output file.')
3459 _add_codereview_select_options(parser) 3465 _add_codereview_select_options(parser)
3460 options, args = parser.parse_args(args) 3466 options, args = parser.parse_args(args)
3461 _process_codereview_select_options(parser, options) 3467 _process_codereview_select_options(parser, options)
3462 3468
3463 if options.reverse: 3469 if options.reverse:
3464 branches = RunGit(['for-each-ref', 'refs/heads', 3470 branches = RunGit(['for-each-ref', 'refs/heads',
3465 '--format=%(refname:short)']).splitlines() 3471 '--format=%(refname:short)']).splitlines()
3466 3472
3467 # Reverse issue lookup. 3473 # Reverse issue lookup.
3468 issue_branch_map = {} 3474 issue_branch_map = {}
3469 for branch in branches: 3475 for branch in branches:
3470 cl = Changelist(branchref=branch) 3476 cl = Changelist(branchref=branch)
3471 issue_branch_map.setdefault(cl.GetIssue(), []).append(branch) 3477 issue_branch_map.setdefault(cl.GetIssue(), []).append(branch)
3472 if not args: 3478 if not args:
3473 args = sorted(issue_branch_map.iterkeys()) 3479 args = sorted(issue_branch_map.iterkeys())
3480 result = {}
3474 for issue in args: 3481 for issue in args:
3475 if not issue: 3482 if not issue:
3476 continue 3483 continue
3484 result[int(issue)] = issue_branch_map.get(int(issue))
3477 print('Branch for issue number %s: %s' % ( 3485 print('Branch for issue number %s: %s' % (
3478 issue, ', '.join(issue_branch_map.get(int(issue)) or ('None',)))) 3486 issue, ', '.join(issue_branch_map.get(int(issue)) or ('None',))))
3487 if options.json:
3488 write_json(options.json, result)
3479 else: 3489 else:
3480 cl = Changelist(codereview=options.forced_codereview) 3490 cl = Changelist(codereview=options.forced_codereview)
3481 if len(args) > 0: 3491 if len(args) > 0:
3482 try: 3492 try:
3483 issue = int(args[0]) 3493 issue = int(args[0])
3484 except ValueError: 3494 except ValueError:
3485 DieWithError('Pass a number to set the issue or none to list it.\n' 3495 DieWithError('Pass a number to set the issue or none to list it.\n'
3486 'Maybe you want to run git cl status?') 3496 'Maybe you want to run git cl status?')
3487 cl.SetIssue(issue) 3497 cl.SetIssue(issue)
3488 print('Issue number: %s (%s)' % (cl.GetIssue(), cl.GetIssueURL())) 3498 print('Issue number: %s (%s)' % (cl.GetIssue(), cl.GetIssueURL()))
3499 if options.json:
3500 write_json(options.json, {
3501 'issue': cl.GetIssue(),
3502 'issue_url': cl.GetIssueURL(),
3503 })
3489 return 0 3504 return 0
3490 3505
3491 3506
3492 def CMDcomments(parser, args): 3507 def CMDcomments(parser, args):
3493 """Shows or posts review comments for any changelist.""" 3508 """Shows or posts review comments for any changelist."""
3494 parser.add_option('-a', '--add-comment', dest='comment', 3509 parser.add_option('-a', '--add-comment', dest='comment',
3495 help='comment to add to an issue') 3510 help='comment to add to an issue')
3496 parser.add_option('-i', dest='issue', 3511 parser.add_option('-i', dest='issue',
3497 help="review issue id (defaults to current issue)") 3512 help="review issue id (defaults to current issue)")
3498 parser.add_option('-j', '--json-file', 3513 parser.add_option('-j', '--json-file',
(...skipping 1688 matching lines...) Expand 10 before | Expand all | Expand 10 after
5187 if __name__ == '__main__': 5202 if __name__ == '__main__':
5188 # These affect sys.stdout so do it outside of main() to simplify mocks in 5203 # These affect sys.stdout so do it outside of main() to simplify mocks in
5189 # unit testing. 5204 # unit testing.
5190 fix_encoding.fix_encoding() 5205 fix_encoding.fix_encoding()
5191 setup_color.init() 5206 setup_color.init()
5192 try: 5207 try:
5193 sys.exit(main(sys.argv[1:])) 5208 sys.exit(main(sys.argv[1:]))
5194 except KeyboardInterrupt: 5209 except KeyboardInterrupt:
5195 sys.stderr.write('interrupted\n') 5210 sys.stderr.write('interrupted\n')
5196 sys.exit(1) 5211 sys.exit(1)
OLDNEW
« no previous file with comments | « no previous file | tests/git_cl_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698