[PATCH v4 0/8] Reimplement rebase --merge via interactive machinery

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux