mirror of
https://chromium.googlesource.com/chromium/tools/depot_tools.git
synced 2026-01-11 18:51:29 +00:00
Add a family of git-commands to assist with the management of multiple CLs/branches.
git-rebase-update - ensure all branches are up to date git-new-branch - create branches git-rename-branch - rename a branch while preserving parentage relationships git-reparent-branch - change the parent of a branch, including rebasing it correctly onto that new parent. git-squash-branch - collapse a branch into a single commit git-upstream-diff - show the diff between the current branch and it's upstream branch git-mark-merge-base - explicitly set what you want the above tools to consider the merge-base for the current branch. R=agable@chromium.org, hinoka@chromium.org, stip@chromium.org, szager@chromium.org BUG=261738 Review URL: https://codereview.chromium.org/184253003 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@259520 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
74
git_reparent_branch.py
Executable file
74
git_reparent_branch.py
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/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.
|
||||
|
||||
"""Change the upstream of the current branch."""
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
import subprocess2
|
||||
|
||||
from git_common import upstream, current_branch, run, tags, set_branch_config
|
||||
from git_common import get_or_create_merge_base, root
|
||||
|
||||
import git_rebase_update
|
||||
|
||||
def main(args):
|
||||
root_ref = root()
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
g = parser.add_mutually_exclusive_group()
|
||||
g.add_argument('new_parent', nargs='?',
|
||||
help='New parent branch (or tag) to reparent to.')
|
||||
g.add_argument('--root', action='store_true',
|
||||
help='Reparent to the configured root branch (%s).' % root_ref)
|
||||
g.add_argument('--lkgr', action='store_true',
|
||||
help='Reparent to the lkgr tag.')
|
||||
opts = parser.parse_args(args)
|
||||
|
||||
# TODO(iannucci): Allow specification of the branch-to-reparent
|
||||
|
||||
branch = current_branch()
|
||||
if opts.root:
|
||||
new_parent = root_ref
|
||||
elif opts.lkgr:
|
||||
new_parent = 'lkgr'
|
||||
else:
|
||||
new_parent = opts.new_parent
|
||||
cur_parent = upstream(branch)
|
||||
|
||||
if branch == 'HEAD' or not branch:
|
||||
parser.error('Must be on the branch you want to reparent')
|
||||
if new_parent == cur_parent:
|
||||
parser.error('Cannot reparent a branch to its existing parent')
|
||||
|
||||
get_or_create_merge_base(branch, cur_parent)
|
||||
|
||||
all_tags = tags()
|
||||
if cur_parent in all_tags:
|
||||
cur_parent += ' [tag]'
|
||||
|
||||
try:
|
||||
run('show-ref', new_parent)
|
||||
except subprocess2.CalledProcessError:
|
||||
print >> sys.stderr, 'fatal: invalid reference: %s' % new_parent
|
||||
return 1
|
||||
|
||||
if new_parent in all_tags:
|
||||
print ("Reparenting %s to track %s [tag] (was %s)"
|
||||
% (branch, new_parent, cur_parent))
|
||||
set_branch_config(branch, 'remote', '.')
|
||||
set_branch_config(branch, 'merge', new_parent)
|
||||
else:
|
||||
print ("Reparenting %s to track %s (was %s)"
|
||||
% (branch, new_parent, cur_parent))
|
||||
run('branch', '--set-upstream-to', new_parent, branch)
|
||||
|
||||
# TODO(iannucci): ONLY rebase-update the branch which moved (and dependants)
|
||||
return git_rebase_update.main(['--no_fetch'])
|
||||
|
||||
|
||||
if __name__ == '__main__': # pragma: no cover
|
||||
sys.exit(main(sys.argv[1:]))
|
||||
Reference in New Issue
Block a user