| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 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 """ | 6 """ |
| 7 Checks out a downstream branch from the currently checked out branch. If there | 7 Checks out a downstream branch from the currently checked out branch. If there |
| 8 is more than one downstream branch, then this script will prompt you to select | 8 is more than one downstream branch, then this script will prompt you to select |
| 9 which branch. | 9 which branch. |
| 10 """ | 10 """ |
| 11 | 11 |
| 12 import argparse |
| 12 import sys | 13 import sys |
| 13 | 14 |
| 14 from git_common import current_branch, branches, upstream, run, hash_one | 15 from git_common import current_branch, branches, upstream, run_stream, hash_one |
| 15 | 16 |
| 16 | 17 |
| 17 def main(argv): | 18 def main(args): |
| 18 assert len(argv) == 1, "No arguments expected" | 19 parser = argparse.ArgumentParser() |
| 20 parser.add_argument('--pick', |
| 21 help=( |
| 22 'The number to pick if this command would ' |
| 23 'prompt')) |
| 24 opts = parser.parse_args(args) |
| 25 |
| 19 upfn = upstream | 26 upfn = upstream |
| 20 cur = current_branch() | 27 cur = current_branch() |
| 21 if cur == 'HEAD': | 28 if cur == 'HEAD': |
| 22 def _upfn(b): | 29 def _upfn(b): |
| 23 parent = upstream(b) | 30 parent = upstream(b) |
| 24 if parent: | 31 if parent: |
| 25 return hash_one(parent) | 32 return hash_one(parent) |
| 26 upfn = _upfn | 33 upfn = _upfn |
| 27 cur = hash_one(cur) | 34 cur = hash_one(cur) |
| 28 downstreams = [b for b in branches() if upfn(b) == cur] | 35 downstreams = [b for b in branches() if upfn(b) == cur] |
| 29 if not downstreams: | 36 if not downstreams: |
| 30 return "No downstream branches" | 37 return "No downstream branches" |
| 31 elif len(downstreams) == 1: | 38 elif len(downstreams) == 1: |
| 32 run('checkout', downstreams[0]) | 39 run_stream('checkout', downstreams[0], stdout=sys.stdout, stderr=sys.stderr) |
| 33 else: | 40 else: |
| 34 high = len(downstreams) - 1 | 41 high = len(downstreams) - 1 |
| 35 print | |
| 36 while True: | 42 while True: |
| 37 print "Please select a downstream branch" | 43 print "Please select a downstream branch" |
| 38 for i, b in enumerate(downstreams): | 44 for i, b in enumerate(downstreams): |
| 39 print " %d. %s" % (i, b) | 45 print " %d. %s" % (i, b) |
| 40 r = raw_input("Selection (0-%d)[0]: " % high).strip() or '0' | 46 prompt = "Selection (0-%d)[0]: " % high |
| 47 r = opts.pick |
| 48 if r: |
| 49 print prompt + r |
| 50 else: |
| 51 r = raw_input(prompt).strip() or '0' |
| 41 if not r.isdigit() or (0 > int(r) > high): | 52 if not r.isdigit() or (0 > int(r) > high): |
| 42 print "Invalid choice." | 53 print "Invalid choice." |
| 43 else: | 54 else: |
| 44 run('checkout', downstreams[int(r)]) | 55 run_stream('checkout', downstreams[int(r)], stdout=sys.stdout, |
| 56 stderr=sys.stderr) |
| 45 break | 57 break |
| 46 | 58 |
| 47 | 59 |
| 48 if __name__ == '__main__': | 60 if __name__ == '__main__': |
| 49 sys.exit(main(sys.argv)) | 61 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |