1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #!/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.
- """
- 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
- import gclient_utils
- def main(argv):
- if gclient_utils.IsEnvCog():
- print('mark-merge-base command is not supported in non-git '
- 'environment.', file=sys.stderr)
- return 1
- 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('fatal: could not resolve %s as a commit' % opts.merge_base,
- file=sys.stderr)
- 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__':
- try:
- sys.exit(main(sys.argv[1:]))
- except KeyboardInterrupt:
- sys.stderr.write('interrupted\n')
- sys.exit(1)
|