| #!/usr/bin/env python |
| # Copyright 2014 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """ |
| Checks out a downstream branch from the currently checked out branch. If there |
| is more than one downstream branch, then this script will prompt you to select |
| which branch. |
| """ |
| import sys |
| |
| from git_common import current_branch, branches, upstream, run, hash_one |
| |
| |
| def main(argv): |
| assert len(argv) == 1, "No arguments expected" |
| upfn = upstream |
| cur = current_branch() |
| if cur == 'HEAD': |
| def _upfn(b): |
| parent = upstream(b) |
| if parent: |
| return hash_one(parent) |
| upfn = _upfn |
| cur = hash_one(cur) |
| downstreams = [b for b in branches() if upfn(b) == cur] |
| if not downstreams: |
| return "No downstream branches" |
| elif len(downstreams) == 1: |
| run('checkout', downstreams[0]) |
| else: |
| high = len(downstreams) - 1 |
| print |
| while True: |
| print "Please select a downstream branch" |
| for i, b in enumerate(downstreams): |
| print " %d. %s" % (i, b) |
| r = raw_input("Selection (0-%d)[0]: " % high).strip() or '0' |
| if not r.isdigit() or (0 > int(r) > high): |
| print "Invalid choice." |
| else: |
| run('checkout', downstreams[int(r)]) |
| break |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main(sys.argv)) |