Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Unified Diff: git_reparent_branch.py

Issue 184253003: Add git-reup and friends (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@freeze_thaw
Patch Set: fix pylint Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « git_rename_branch.py ('k') | git_squash_branch.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: git_reparent_branch.py
diff --git a/git_reparent_branch.py b/git_reparent_branch.py
new file mode 100755
index 0000000000000000000000000000000000000000..9b7dace27fec9e5210b9227643d0cfe459c8c7b4
--- /dev/null
+++ b/git_reparent_branch.py
@@ -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:]))
« no previous file with comments | « git_rename_branch.py ('k') | git_squash_branch.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698