Subject: [PATCH v3 00/15] rebase: make the default backend configurable

From: "Elijah Newren via GitGitGadget" <[email-masked]>
Date: Tue, 24 Dec 2019 19:54:44 +0000

This series does a lot of work around making the default rebase backend
configurable, and switching the default from the am backend to the
merge/interactive one.

See the cover letter for v1[*] for a more detailed motivation for the
series, the type of changes being made, and areas I'd like to reviewers to
focus on.

Changes since v2:

 * Tweaked patch 11 (commit message, and condensing if-else block that was
   same on both sides), as suggested by Denton

[*] 
https://lore.kernel.org/git/[email-masked]/

Elijah Newren (15):
  rebase: extend the options for handling of empty commits
  t3406: simplify an already simple test
  rebase, sequencer: remove the broken GIT_QUIET handling
  rebase: make sure to pass along the quiet flag to the sequencer
  rebase: fix handling of restrict_revision
  t3432: make these tests work with either am or merge backends
  rebase: allow more types of rebases to fast-forward
  git-rebase.txt: add more details about behavioral differences of
    backends
  rebase: move incompatibility checks between backend options a bit
    earlier
  rebase: add an --am option
  git-prompt: change the prompt for interactive-based rebases
  rebase tests: mark tests specific to the am-backend with --am
  rebase tests: repeat some tests using the merge backend instead of am
  rebase: make the backend configurable via config setting
  rebase: change the default backend from "am" to "merge"

 Documentation/config/rebase.txt         |   8 ++
 Documentation/git-rebase.txt            | 150 ++++++++++++++++----
 builtin/rebase.c                        | 177 +++++++++++++++++++-----
 contrib/completion/git-prompt.sh        |   6 +-
 rebase-interactive.c                    |   4 +-
 rebase-interactive.h                    |   2 +-
 sequencer.c                             |  80 ++++++++---
 sequencer.h                             |   6 +-
 t/t3400-rebase.sh                       |  36 ++++-
 t/t3401-rebase-and-am-rename.sh         |   4 +-
 t/t3404-rebase-interactive.sh           |   2 +-
 t/t3406-rebase-message.sh               |  19 ++-
 t/t3407-rebase-abort.sh                 |   6 +-
 t/t3420-rebase-autostash.sh             |   2 +-
 t/t3421-rebase-topology-linear.sh       |   4 +-
 t/t3424-rebase-empty.sh                 |  89 ++++++++++++
 t/t3425-rebase-topology-merges.sh       |   8 +-
 t/t3427-rebase-subtree.sh               |  16 ++-
 t/t3432-rebase-fast-forward.sh          |  54 ++++----
 t/t3433-rebase-options-compatibility.sh |  13 +-
 t/t5407-post-rewrite-hook.sh            |  12 +-
 t/t5520-pull.sh                         |  27 +++-
 t/t6047-diff3-conflict-markers.sh       |  13 +-
 t/t7512-status-help.sh                  |  12 +-
 t/t9106-git-svn-commit-diff-clobber.sh  |   3 +-
 t/t9903-bash-prompt.sh                  |   8 +-
 26 files changed, 576 insertions(+), 185 deletions(-)
 create mode 100755 t/t3424-rebase-empty.sh

base-commit: 12029dc57db23baef008e77db1909367599210ee
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-679%2Fnewren%2Frebase-fixes-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-679/newren/rebase-fixes-v3
Pull-Request: https://github.com/git/git/pull/679

Range-diff vs v2:

  1:  1c2b77e94d =  1:  1c2b77e94d rebase: extend the options for handling of empty commits
  2:  bd3c5ec155 =  2:  bd3c5ec155 t3406: simplify an already simple test
  3:  49388b79fd =  3:  49388b79fd rebase, sequencer: remove the broken GIT_QUIET handling
  4:  478479358f =  4:  478479358f rebase: make sure to pass along the quiet flag to the sequencer
  5:  ee26f5a161 =  5:  ee26f5a161 rebase: fix handling of restrict_revision
  6:  34a69def33 =  6:  34a69def33 t3432: make these tests work with either am or merge backends
  7:  f2c92853b4 =  7:  f2c92853b4 rebase: allow more types of rebases to fast-forward
  8:  b307340f7c =  8:  b307340f7c git-rebase.txt: add more details about behavioral differences of backends
  9:  7c3f2e07f3 =  9:  7c3f2e07f3 rebase: move incompatibility checks between backend options a bit earlier
 10:  1df11f0b51 = 10:  1df11f0b51 rebase: add an --am option
 11:  94b5a3051d ! 11:  ff43593211 contrib: change the prompt for interactive-based rebases
     @@ -1,6 +1,6 @@
      Author: Elijah Newren <[email-masked]>
      
     -    contrib: change the prompt for interactive-based rebases
     +    git-prompt: change the prompt for interactive-based rebases
      
          In the past, we had different prompts for different types of rebases:
             REBASE: for am-based rebases
     @@ -40,17 +40,18 @@
       --- a/contrib/completion/git-prompt.sh
       +++ b/contrib/completion/git-prompt.sh
      @@
     + 		__git_eread "$g/rebase-merge/head-name" b
       		__git_eread "$g/rebase-merge/msgnum" step
       		__git_eread "$g/rebase-merge/end" total
     - 		if [ -f "$g/rebase-merge/interactive" ]; then
     +-		if [ -f "$g/rebase-merge/interactive" ]; then
      -			r="|REBASE-i"
     -+			r="|REBASE"
     - 		else
     +-		else
      -			r="|REBASE-m"
     -+			r="|REBASE"
     - 		fi
     +-		fi
     ++		r="|REBASE"
       	else
       		if [ -d "$g/rebase-apply" ]; then
     + 			__git_eread "$g/rebase-apply/next" step
      
       diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
       --- a/t/t9903-bash-prompt.sh
 12:  c905d288bf = 12:  99388f24e5 rebase tests: mark tests specific to the am-backend with --am
 13:  0287881361 = 13:  c2ba6317bf rebase tests: repeat some tests using the merge backend instead of am
 14:  ec782e711c = 14:  8bec6df51a rebase: make the backend configurable via config setting
 15:  7adcbc0bc5 = 15:  044853fd61 rebase: change the default backend from "am" to "merge"

-- 
gitgitgadget