| Index: git_new_branch.py
|
| diff --git a/git_new_branch.py b/git_new_branch.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..c221cb5d19119ee301d13134a287b095bb2ad535
|
| --- /dev/null
|
| +++ b/git_new_branch.py
|
| @@ -0,0 +1,53 @@
|
| +#!/usr/local/bin/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.
|
| +
|
| +import argparse
|
| +import sys
|
| +
|
| +import subprocess2
|
| +
|
| +from git_common import run, root, set_config, get_or_create_merge_base, tags
|
| +from git_common import hash_one
|
| +
|
| +
|
| +def main(args):
|
| + parser = argparse.ArgumentParser(
|
| + formatter_class=argparse.ArgumentDefaultsHelpFormatter
|
| + )
|
| + parser.add_argument('branch_name')
|
| + g = parser.add_mutually_exclusive_group()
|
| + g.add_argument('--upstream_current', action='store_true',
|
| + help='set upstream branch to current branch.')
|
| + g.add_argument('--upstream', metavar='REF', default=root(),
|
| + help='upstream branch (or tag) to track.')
|
| + g.add_argument('--lkgr', action='store_const', const='lkgr', dest='upstream',
|
| + help='set basis ref for new branch to lkgr.')
|
| +
|
| + opts = parser.parse_args(args)
|
| +
|
| + try:
|
| + if opts.upstream_current:
|
| + run('checkout', '--track', '-b', opts.branch_name)
|
| + else:
|
| + if opts.upstream in tags():
|
| + # TODO(iannucci): ensure that basis_ref is an ancestor of HEAD?
|
| + run('checkout', '--no-track', '-b', opts.branch_name,
|
| + hash_one(opts.upstream))
|
| + set_config('branch.%s.remote' % opts.branch_name, '.')
|
| + set_config('branch.%s.merge' % opts.branch_name, opts.upstream)
|
| + else:
|
| + # TODO(iannucci): Detect unclean workdir then stash+pop if we need to
|
| + # teleport to a conflicting portion of history?
|
| + run('checkout', '--track', opts.upstream, '-b', opts.branch_name)
|
| +
|
| + get_or_create_merge_base(opts.branch_name)
|
| + except subprocess2.CalledProcessError as cpe:
|
| + sys.stdout.write(cpe.stdout)
|
| + sys.stderr.write(cpe.stderr)
|
| + return 1
|
| +
|
| +
|
| +if __name__ == '__main__': # pragma: no cover
|
| + sys.exit(main(sys.argv[1:]))
|
|
|