This series continues the work of making rebase more self-consistent
by removing inconsistencies between different backends. In
particular, this series focuses on making the merge machinery behave
like the interactive machinery (though a few differences between the am
and interactive backends are also fixed along the way), and ultimately
removes the merge backend in favor of reimplementing the relevant
options on top of the interactive machinery.
Differences since v3 (full range-diff below):
- Fixed the redundant "fatal: error:" error message prefixes, as pointed
out by Duy
- Rebased on 2.20.0
Elijah Newren (8):
rebase: make builtin and legacy script error messages the same
rebase: fix incompatible options error message
t5407: add a test demonstrating how interactive handles --skip
differently
am, rebase--merge: do not overlook --skip'ed commits with post-rewrite
git-rebase, sequencer: extend --quiet option for the interactive
machinery
git-legacy-rebase: simplify unnecessary triply-nested if
rebase: define linearization ordering and enforce it
rebase: Implement --merge via the interactive machinery
.gitignore | 1 -
Documentation/git-rebase.txt | 17 +---
Makefile | 1 -
builtin/am.c | 9 ++
builtin/rebase.c | 30 ++----
git-legacy-rebase.sh | 65 ++++++------
git-rebase--am.sh | 2 +-
git-rebase--common.sh | 2 +-
git-rebase--merge.sh | 164 ------------------------------
sequencer.c | 23 +++--
sequencer.h | 1 +
t/t3406-rebase-message.sh | 7 +-
t/t3420-rebase-autostash.sh | 78 ++------------
t/t3421-rebase-topology-linear.sh | 10 +-
t/t3425-rebase-topology-merges.sh | 15 ++-
t/t5407-post-rewrite-hook.sh | 34 +++++++
t/t9903-bash-prompt.sh | 2 +-
17 files changed, 121 insertions(+), 340 deletions(-)
delete mode 100644 git-rebase--merge.sh
Range-diff:
-: ---------- > 1: 2e8b1bcb8b rebase: make builtin and legacy script error
messages the same
1: 2f4bdd1980 ! 2: eba87828c6 rebase: fix incompatible options error message
@@ -9,12 +9,12 @@
understood by separate backends were used:
$ git rebase --keep --ignore-whitespace
- fatal: error: cannot combine interactive options (--interactive,
--exec,
+ fatal: cannot combine interactive options (--interactive, --exec,
--rebase-merges, --preserve-merges, --keep-empty, --root + --onto) with
am options (.git/rebase-apply/applying)
$ git rebase --merge --ignore-whitespace
- fatal: error: cannot combine merge options (--merge, --strategy,
+ fatal: cannot combine merge options (--merge, --strategy,
--strategy-option) with am options (.git/rebase-apply/applying)
Note that in both cases, the list of "am options" is
@@ -33,18 +33,17 @@
break;
if (is_interactive(&options) && i >= 0)
-- die(_("error: cannot combine interactive options "
+- die(_("cannot combine interactive options "
- "(--interactive, --exec, --rebase-merges, "
- "--preserve-merges, --keep-empty, --root + "
- "--onto) with am options (%s)"), buf.buf);
-+ die(_("error: cannot combine am options "
++ die(_("cannot combine am options "
+ "with interactive options"));
if (options.type == REBASE_MERGE && i >= 0)
-- die(_("error: cannot combine merge options (--merge, "
+- die(_("cannot combine merge options (--merge, "
- "--strategy, --strategy-option) with am options "
- "(%s)"), buf.buf);
-+ die(_("error: cannot combine am options "
-+ "with merge options "));
++ die(_("cannot combine am options with merge options "));
}
if (options.signoff) {
@@ -56,15 +55,15 @@
then
if test -n "$incompatible_opts"
then
-- die "$(gettext "error: cannot combine interactive
options (--interactive, --exec, --rebase-merges, --preserve-merges,
--keep-empty, --root + --onto) with am options ($incompatible_opts)")"
-+ die "$(gettext "error: cannot combine am options with
interactive options")"
+- die "$(gettext "fatal: cannot combine interactive
options (--interactive, --exec, --rebase-merges, --preserve-merges,
--keep-empty, --root + --onto) with am options ($incompatible_opts)")"
++ die "$(gettext "fatal: cannot combine am options with
interactive options")"
fi
fi
if test -n "$do_merge"; then
if test -n "$incompatible_opts"
then
-- die "$(gettext "error: cannot combine merge options
(--merge, --strategy, --strategy-option) with am options ($incompatible_opts)")"
-+ die "$(gettext "error: cannot combine am options with
merge options")"
+- die "$(gettext "fatal: cannot combine merge options
(--merge, --strategy, --strategy-option) with am options ($incompatible_opts)")"
++ die "$(gettext "fatal: cannot combine am options with
merge options")"
fi
fi
fi
2: cc33a8ccc1 = 3: 15d929edb2 t5407: add a test demonstrating how interactive
handles --skip differently
3: f5838ef763 = 4: c9d6d5141e am, rebase--merge: do not overlook --skip'ed
commits with post-rewrite
4: 50dc863d9f = 5: 0b19ad8e2d git-rebase, sequencer: extend --quiet option
for the interactive machinery
5: 35cf552f27 ! 6: 5ded8654ec git-legacy-rebase: simplify unnecessary
triply-nested if
@@ -18,7 +18,7 @@
moving the innermost conditional to the outside, allowing us to remove
the test on git_am_opt entirely and giving us the following form:
- if incomptable_opts:
+ if incompatible_opts:
if interactive:
show_error_about_interactive_and_am_incompatibilities
if rebase-merge:
@@ -44,18 +44,18 @@
then
- if test -n "$incompatible_opts"
- then
-- die "$(gettext "error: cannot combine am options with
interactive options")"
+- die "$(gettext "fatal: cannot combine am options with
interactive options")"
- fi
-+ die "$(gettext "error: cannot combine am options with
interactive options")"
++ die "$(gettext "fatal: cannot combine am options with
interactive options")"
fi
- if test -n "$do_merge"; then
- if test -n "$incompatible_opts"
- then
-- die "$(gettext "error: cannot combine am options with
merge options")"
+- die "$(gettext "fatal: cannot combine am options with
merge options")"
- fi
+ if test -n "$do_merge"
+ then
-+ die "$(gettext "error: cannot combine am options with merge
options")"
++ die "$(gettext "fatal: cannot combine am options with merge
options")"
fi
fi
6: 2a3d8ff1c1 = 7: bb8e5a4527 rebase: define linearization ordering and
enforce it
7: 58371d377a ! 8: 5de428d695 rebase: Implement --merge via the interactive
machinery
@@ -142,14 +142,15 @@
imply_interactive(&options, "--root without --onto");
@@
+ break;
if (is_interactive(&options) && i >= 0)
- die(_("error: cannot combine am options "
+- die(_("cannot combine am options "
- "with interactive options"));
- if (options.type == REBASE_MERGE && i >= 0)
-- die(_("error: cannot combine am options "
-- "with merge options "));
-+ "with either interactive or merge options"));
+- die(_("cannot combine am options with merge options "));
++ die(_("cannot combine am options with either "
++ "interactive or merge options"));
}
if (options.signoff) {
@@ -205,13 +206,13 @@
then
- if test -n "$interactive_rebase"
- then
-- die "$(gettext "error: cannot combine am options with
interactive options")"
+- die "$(gettext "fatal: cannot combine am options with
interactive options")"
- fi
- if test -n "$do_merge"
+ if test -n "$actually_interactive" || test "$do_merge"
then
-- die "$(gettext "error: cannot combine am options with merge
options")"
-+ die "$(gettext "error: cannot combine am options with either
interactive or merge options")"
+- die "$(gettext "fatal: cannot combine am options with merge
options")"
++ die "$(gettext "fatal: cannot combine am options with either
interactive or merge options")"
fi
fi
@@ -225,7 +226,7 @@
# linear history?
! (git rev-list --parents "$onto".."$orig_head" | sane_grep " .* ") >
/dev/null
@@
- GIT_PAGER='' git diff --stat --summary "$mb" "$onto"
+ GIT_PAGER='' git diff --stat --summary "$mb_tree" "$onto"
fi
+if test -z "$actually_interactive" && test "$mb" = "$orig_head"
--
2.20.0.8.g5de428d695