#!/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)