|
|
|
#!/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.
|
|
|
|
|
|
|
|
"""Rename the current branch while maintaining correct dependencies."""
|
|
|
|
|
|
|
|
import argparse
|
|
|
|
import sys
|
|
|
|
|
|
|
|
import subprocess2
|
|
|
|
|
|
|
|
from git_common import current_branch, run, set_branch_config, branch_config
|
|
|
|
from git_common import branch_config_map
|
|
|
|
|
|
|
|
def main(args):
|
|
|
|
current = current_branch()
|
|
|
|
if current == 'HEAD':
|
|
|
|
current = None
|
|
|
|
old_name_help = 'The old branch to rename.'
|
|
|
|
if current:
|
|
|
|
old_name_help += ' (default %(default)r)'
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
|
|
parser.add_argument('old_name', nargs=('?' if current else 1),
|
|
|
|
help=old_name_help, default=current)
|
|
|
|
parser.add_argument('new_name', help='The new branch name.')
|
|
|
|
|
|
|
|
opts = parser.parse_args(args)
|
|
|
|
|
|
|
|
# when nargs=1, we get a list :(
|
|
|
|
if isinstance(opts.old_name, list):
|
|
|
|
opts.old_name = opts.old_name[0]
|
|
|
|
|
|
|
|
try:
|
|
|
|
run('branch', '-m', opts.old_name, opts.new_name)
|
|
|
|
|
|
|
|
# update the downstreams
|
|
|
|
for branch, merge in branch_config_map('merge').iteritems():
|
|
|
|
if merge == 'refs/heads/' + opts.old_name:
|
|
|
|
# Only care about local branches
|
|
|
|
if branch_config(branch, 'remote') == '.':
|
|
|
|
set_branch_config(branch, 'merge', 'refs/heads/' + opts.new_name)
|
|
|
|
except subprocess2.CalledProcessError as cpe:
|
|
|
|
sys.stderr.write(cpe.stderr)
|
|
|
|
return 1
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__': # pragma: no cover
|
|
|
|
try:
|
|
|
|
sys.exit(main(sys.argv[1:]))
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
sys.stderr.write('interrupted\n')
|
|
|
|
sys.exit(1)
|