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