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.
		
		
		
		
		
			
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
#!/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.
 | 
						|
 | 
						|
"""
 | 
						|
Explicitly set/remove/print the merge-base for the current branch.
 | 
						|
 | 
						|
This manually set merge base will be a stand-in for `git merge-base` for the
 | 
						|
purposes of the chromium depot_tools git extensions. Passing no arguments will
 | 
						|
just print the effective merge base for the current branch.
 | 
						|
"""
 | 
						|
 | 
						|
import argparse
 | 
						|
import sys
 | 
						|
 | 
						|
from subprocess2 import CalledProcessError
 | 
						|
 | 
						|
from git_common import remove_merge_base, manual_merge_base, current_branch
 | 
						|
from git_common import get_or_create_merge_base, hash_one, upstream
 | 
						|
 | 
						|
 | 
						|
def main(argv):
 | 
						|
  parser = argparse.ArgumentParser(
 | 
						|
    description=__doc__.strip().splitlines()[0],
 | 
						|
    epilog=' '.join(__doc__.strip().splitlines()[1:]))
 | 
						|
  g = parser.add_mutually_exclusive_group()
 | 
						|
  g.add_argument(
 | 
						|
    'merge_base', nargs='?',
 | 
						|
    help='The new hash to use as the merge base for the current branch'
 | 
						|
  )
 | 
						|
  g.add_argument('--delete', '-d', action='store_true',
 | 
						|
                 help='Remove the set mark.')
 | 
						|
  opts = parser.parse_args(argv)
 | 
						|
 | 
						|
  cur = current_branch()
 | 
						|
 | 
						|
  if opts.delete:
 | 
						|
    try:
 | 
						|
      remove_merge_base(cur)
 | 
						|
    except CalledProcessError:
 | 
						|
      print "No merge base currently exists for %s." % cur
 | 
						|
    return 0
 | 
						|
 | 
						|
  if opts.merge_base:
 | 
						|
    try:
 | 
						|
      opts.merge_base = hash_one(opts.merge_base)
 | 
						|
    except CalledProcessError:
 | 
						|
      print >> sys.stderr, (
 | 
						|
          'fatal: could not resolve %s as a commit' % (opts.merge_base)
 | 
						|
      )
 | 
						|
      return 1
 | 
						|
 | 
						|
    manual_merge_base(cur, opts.merge_base, upstream(cur))
 | 
						|
 | 
						|
  ret = 0
 | 
						|
  actual = get_or_create_merge_base(cur)
 | 
						|
  if opts.merge_base and opts.merge_base != actual:
 | 
						|
    ret = 1
 | 
						|
    print "Invalid merge_base %s" % opts.merge_base
 | 
						|
 | 
						|
  print "merge_base(%s): %s" % (cur, actual)
 | 
						|
 | 
						|
  return ret
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
  sys.exit(main(sys.argv[1:]))
 |