#!/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.
"""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').items():
            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.decode('utf-8', 'replace'))
        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)
