You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
11 years ago
|
#!/usr/bin/env python
|
||
|
"""
|
||
|
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':
|
||
|
upfn = lambda b: hash_one(upstream(b))
|
||
|
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))
|