diff --git a/git_rebase_update.py b/git_rebase_update.py index e557ab12a9..89eef39803 100755 --- a/git_rebase_update.py +++ b/git_rebase_update.py @@ -141,7 +141,7 @@ def remove_empty_branches(branch_tree): 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 @@ def rebase_branch(branch, parent, start_hash): 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 @@ def main(args=None): '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 @@ def main(args=None): 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 diff --git a/man/html/git-rebase-update.html b/man/html/git-rebase-update.html index 5e01291e06..29a27a2526 100644 --- a/man/html/git-rebase-update.html +++ b/man/html/git-rebase-update.html @@ -756,7 +756,7 @@ git-rebase-update(1) Manual Page

SYNOPSIS

-
git rebase-update [-v | --verbose] [-n | --no-fetch] [-k | --keep-going]
+
git rebase-update [-v | --verbose] [-n | --no-fetch] [-k | --keep-going] [--no-squash]
@@ -869,6 +869,14 @@ Restoration

+--no-squash +
+
+

+ Skip the squash phase of rebase-update when there are merge conflicts. +

+
+
-v
diff --git a/man/src/git-rebase-update.txt b/man/src/git-rebase-update.txt index e7c0c2d2fd..07f0b908f2 100644 --- a/man/src/git-rebase-update.txt +++ b/man/src/git-rebase-update.txt @@ -9,7 +9,7 @@ include::_git-rebase-update_desc.helper.txt[] SYNOPSIS -------- [verse] -'git rebase-update' [-v | --verbose] [-n | --no-fetch] [-k | --keep-going] +'git rebase-update' [-v | --verbose] [-n | --no-fetch] [-k | --keep-going] [--no-squash] DESCRIPTION ----------- @@ -78,6 +78,9 @@ OPTIONS --no-fetch:: Skip the `git fetch` phase of rebase-update. +--no-squash:: + Skip the squash phase of rebase-update when there are merge conflicts. + -v:: --verbose:: More text than your terminal can handle.