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.
		
		
		
		
		
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
#!/usr/bin/env python3
 | 
						|
# 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.
 | 
						|
"""
 | 
						|
 | 
						|
from __future__ import print_function
 | 
						|
 | 
						|
import argparse
 | 
						|
import sys
 | 
						|
 | 
						|
import gclient_utils
 | 
						|
from git_common import current_branch, branches, upstream, run, hash_one
 | 
						|
import metrics
 | 
						|
 | 
						|
 | 
						|
@metrics.collector.collect_metrics('git nav-downstream')
 | 
						|
def main(args):
 | 
						|
  parser = argparse.ArgumentParser()
 | 
						|
  parser.add_argument('--pick',
 | 
						|
                      help=(
 | 
						|
                          'The number to pick if this command would '
 | 
						|
                          'prompt'))
 | 
						|
  opts = parser.parse_args(args)
 | 
						|
 | 
						|
  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:
 | 
						|
    print("No downstream branches")
 | 
						|
    return 1
 | 
						|
 | 
						|
  if len(downstreams) == 1:
 | 
						|
    run('checkout', downstreams[0], stdout=sys.stdout, stderr=sys.stderr)
 | 
						|
  else:
 | 
						|
    high = len(downstreams) - 1
 | 
						|
    while True:
 | 
						|
      print("Please select a downstream branch")
 | 
						|
      for i, b in enumerate(downstreams):
 | 
						|
        print("  %d. %s" % (i, b))
 | 
						|
      prompt = "Selection (0-%d)[0]: " % high
 | 
						|
      r = opts.pick
 | 
						|
      if r:
 | 
						|
        print(prompt + r)
 | 
						|
      else:
 | 
						|
        r = gclient_utils.AskForData(prompt).strip() or '0'
 | 
						|
      if not r.isdigit() or (0 > int(r) > high):
 | 
						|
        print("Invalid choice.")
 | 
						|
      else:
 | 
						|
        run('checkout', downstreams[int(r)], stdout=sys.stdout,
 | 
						|
            stderr=sys.stderr)
 | 
						|
        break
 | 
						|
  return 0
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
  with metrics.collector.print_notice_and_exit():
 | 
						|
    sys.exit(main(sys.argv[1:]))
 |