Add --no-squash argument to git rebase-update
--no-squash makes it faster to run rebase-update when there are merge
conflicts and you know that squashing will not help. For example, I
store all of my branches in one commit each, so I know that squashing
isn't even possible because they are already squashed.
Change-Id: I2679a855ad79d602a6d1ee09c140f2fd27ae20c5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2904096
Reviewed-by: Dirk Pranke <dpranke@google.com>
Reviewed-by: Robbie Iannucci <iannucci@chromium.org>
Commit-Queue: Joey Arhar <jarhar@chromium.org>
diff --git a/git_rebase_update.py b/git_rebase_update.py
index e557ab1..89eef39 100755
--- a/git_rebase_update.py
+++ b/git_rebase_update.py
@@ -141,7 +141,7 @@
print(git.run('branch', '-d', branch))
-def rebase_branch(branch, parent, start_hash):
+def rebase_branch(branch, parent, start_hash, no_squash):
logging.debug('considering %s(%s) -> %s(%s) : %s',
branch, git.hash_one(branch), parent, git.hash_one(parent),
start_hash)
@@ -162,8 +162,18 @@
if git.hash_one(parent) != start_hash:
# Try a plain rebase first
print('Rebasing:', branch)
- rebase_ret = git.rebase(parent, start_hash, branch, abort=True)
+ rebase_ret = git.rebase(parent, start_hash, branch, abort = not no_squash)
if not rebase_ret.success:
+ if no_squash:
+ print(textwrap.dedent("""\
+ Your working copy is in mid-rebase. Either:
+ * completely resolve like a normal git-rebase; OR
+ * abort the rebase and mark this branch as dormant:
+ git config branch.%s.dormant true
+
+ And then run `git rebase-update` again to resume.
+ """ % branch))
+ return False
# TODO(iannucci): Find collapsible branches in a smarter way?
print("Failed! Attempting to squash", branch, "...", end=' ')
sys.stdout.flush()
@@ -235,6 +245,9 @@
'if none specified.')
parser.add_argument('--keep-empty', '-e', action='store_true',
help='Do not automatically delete empty branches.')
+ parser.add_argument(
+ '--no-squash', action='store_true',
+ help='Will not try to squash branches when rebasing fails.')
opts = parser.parse_args(args)
if opts.verbose: # pragma: no cover
@@ -295,7 +308,7 @@
if git.is_dormant(branch):
print('Skipping dormant branch', branch)
else:
- ret = rebase_branch(branch, parent, merge_base[branch])
+ ret = rebase_branch(branch, parent, merge_base[branch], opts.no_squash)
if not ret:
retcode = 1