From 84a80c4057d8ff5214a6f52c74e7eea7a7c8e75d Mon Sep 17 00:00:00 2001 From: "scottmg@chromium.org" Date: Tue, 22 Sep 2015 20:40:37 +0000 Subject: [PATCH] Add `git cl checkout` to checkout by Rietveld issue For example: [5165c48...]d:\src\crashpad\crashpad>git cl checkout https://codereview.chromium.org/1355503005 Previous HEAD position was 5165c48... Use argument escaping function in util/win/process_info_test.cc Switched to branch 'crashpad-info-cross-bitness' [crashpad-info-cross-bitness]d:\src\crashpad\crashpad>git cl checkout 818433002 Multiple branches match issue 818433002: 0: file_io_open 1: file_io_open-2 2: file_io_open-3 Choose by index: 1 Switched to branch 'file_io_open-2' R=dpranke@chromium.org Review URL: https://codereview.chromium.org/1357213003 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@296823 0039d316-1c4b-4281-b951-d872f2087c98 --- git_cl.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/git_cl.py b/git_cl.py index aef7c4ff9..4964350b2 100755 --- a/git_cl.py +++ b/git_cl.py @@ -3541,6 +3541,50 @@ def CMDformat(parser, args): return return_value +@subcommand.usage('') +def CMDcheckout(parser, args): + """Checks out a branch associated with a given Rietveld issue.""" + _, args = parser.parse_args(args) + + if len(args) != 1: + parser.print_help() + return 1 + + if re.match(r'\d+', args[0]): + target_issue = args[0] + elif args[0].startswith('http'): + target_issue = re.sub(r'.*/(\d+)/?', r'\1', args[0]) + else: + parser.print_help() + return 1 + + key_and_issues = [x.split() for x in RunGit( + ['config', '--local', '--get-regexp', r'branch\..*\.rietveldissue']) + .splitlines()] + branches = [] + for key, issue in key_and_issues: + if issue == target_issue: + branches.append(re.sub(r'branch\.(.*)\.rietveldissue', r'\1', key)) + + if len(branches) == 0: + print 'No branch found for issue %s.' % target_issue + return 1 + if len(branches) == 1: + RunGit(['checkout', branches[0]]) + else: + print 'Multiple branches match issue %s:' % target_issue + for i in range(len(branches)): + print '%d: %s' % (i, branches[i]) + which = raw_input('Choose by index: ') + try: + RunGit(['checkout', branches[int(which)]]) + except (IndexError, ValueError): + print 'Invalid selection, not checking out any branch.' + return 1 + + return 0 + + def CMDlol(parser, args): # This command is intentionally undocumented. print zlib.decompress(base64.b64decode(