From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: phillip.wood@dunelm.org.uk
Cc: Elijah Newren <newren@gmail.com>,
git@vger.kernel.org, gitster@pobox.com, predatoramigo@gmail.com
Subject: Re: [PATCH v2 2/2] rebase: Implement --merge via git-rebase--interactive
Date: Tue, 13 Nov 2018 10:18:17 +0100 (STD) [thread overview]
Message-ID: <nycvar.QRO.7.76.6.1811131017250.39@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <f0231c21-8727-94cb-96aa-13ebfb5b7283@talktalk.net>
Hi Phillip,
On Mon, 12 Nov 2018, Phillip Wood wrote:
> It's good to see these patches progressing, I've just got a couple of
> comments related to Johannes' points below
>
> On 12/11/2018 16:21, Johannes Schindelin wrote:
> > Hi Elijah,
> >
> > On Wed, 7 Nov 2018, Elijah Newren wrote:
> >
> >> Interactive rebases are implemented in terms of cherry-pick rather than
> >> the merge-recursive builtin, but cherry-pick also calls into the recursive
> >> merge machinery by default and can accept special merge strategies and/or
> >> special strategy options. As such, there really is not any need for
> >> having both git-rebase--merge and git-rebase--interactive anymore.
> >>
> >> Delete git-rebase--merge.sh and have the --merge option be implemented
> >> by the now built-in interactive machinery.
> >
> > Okay.
> >
> >> Note that this change fixes a few known test failures (see t3421).
> >
> > Nice!
> >
> >> testcase modification notes:
> >> t3406: --interactive and --merge had slightly different progress output
> >> while running; adjust a test to match
> >> t3420: these test precise output while running, but rebase--am,
> >> rebase--merge, and rebase--interactive all were built on very
> >> different commands (am, merge-recursive, cherry-pick), so the
> >> tests expected different output for each type. Now we expect
> >> --merge and --interactive to have the same output.
> >> t3421: --interactive fixes some bugs in --merge! Wahoo!
> >> t3425: topology linearization was inconsistent across flavors of rebase,
> >> as already noted in a TODO comment in the testcase. This was not
> >> considered a bug before, so getting a different linearization due
> >> to switching out backends should not be considered a bug now.
> >
> > Ideally, the test would be fixed, then. If it fails for other reasons than
> > a real regression, it is not a very good regression test, is it.
> >
> >> t5407: different rebase types varied slightly in how many times checkout
> >> or commit or equivalents were called based on a quick comparison
> >> of this tests and previous ones which covered different rebase
> >> flavors. I think this is just attributable to this difference.
> >
> > This concerns me.
> >
> > In bigger repositories (no, I am not talking about Linux kernel sized
> > ones, I consider those small-ish) there are a ton of files, and checkout
> > and commit (and even more so reset) sadly do not have a runtime complexity
> > growing with the number of modified files, but with the number of tracked
> > files (and some commands even with the number of worktree files).
> >
> > So a larger number of commit/checkout operations makes me expect
> > performance regressions.
> >
> > In this light, could you elaborate a bit on the differences you see
> > between rebase -i and rebase -m?
> >
> >> t9903: --merge uses the interactive backend so the prompt expected is
> >> now REBASE-i.
> >
> > We should be able to make that test pass, still, by writing out a special
> > file (e.g. $state_dir/opt_m) and testing for that. Users are oddly upset
> > when their expectations are broken... (and I actually agree with them.)
> >
> >> diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
> >> index 3407d835bd..35084f5681 100644
> >> --- a/Documentation/git-rebase.txt
> >> +++ b/Documentation/git-rebase.txt
> >> @@ -504,15 +504,7 @@ See also INCOMPATIBLE OPTIONS below.
> >> INCOMPATIBLE OPTIONS
> >> --------------------
> >>
> >> -git-rebase has many flags that are incompatible with each other,
> >> -predominantly due to the fact that it has three different underlying
> >> -implementations:
> >> -
> >> - * one based on linkgit:git-am[1] (the default)
> >> - * one based on git-merge-recursive (merge backend)
> >> - * one based on linkgit:git-cherry-pick[1] (interactive backend)
> >> -
> >
> > Could we retain this part, with `s/three/two/` and `/git-merge/d`? *Maybe*
> > `s/interactive backend/interactive\/merge backend/`
>
> I was hoping we could get rid of that, I'm not sure how useful it is to
> users.
That's a good point. If the commit message makes the case for that (it is
an implementation detail that confuses users), I am fine with removing it,
too.
Thanks,
Dscho
>
> >
> >> -Flags only understood by the am backend:
> >> +The following options:
> >>
> >> * --committer-date-is-author-date
> >> * --ignore-date
> >> @@ -520,15 +512,12 @@ Flags only understood by the am backend:
> >> * --ignore-whitespace
> >> * -C
> >>
> >> -Flags understood by both merge and interactive backends:
> >> +are incompatible with the following options:
> >>
> >> * --merge
> >> * --strategy
> >> * --strategy-option
> >> * --allow-empty-message
> >> -
> >> -Flags only understood by the interactive backend:
> >> -
>
> It's nice to see this being simplified
>
> >> * --[no-]autosquash
> >> * --rebase-merges
> >> * --preserve-merges
> >> @@ -539,7 +528,7 @@ Flags only understood by the interactive backend:
> >> * --edit-todo
> >> * --root when used in combination with --onto
> >>
> >> -Other incompatible flag pairs:
> >> +In addition, the following pairs of options are incompatible:
> >>
> >> * --preserve-merges and --interactive
> >> * --preserve-merges and --signoff
> >
> > The rest of the diff is funny to read, but the post image makes a lot of
> > sense.
> >
> >> diff --git a/builtin/rebase.c b/builtin/rebase.c
> >> index be004406a6..d55bbb9eb9 100644
> >> --- a/builtin/rebase.c
> >> +++ b/builtin/rebase.c
> >> @@ -118,7 +118,7 @@ static void imply_interactive(struct rebase_options *opts, const char *option)
> >> case REBASE_PRESERVE_MERGES:
> >> break;
> >> case REBASE_MERGE:
> >> - /* we silently *upgrade* --merge to --interactive if needed */
> >> + /* we now implement --merge via --interactive */
> >> default:
> >> opts->type = REBASE_INTERACTIVE; /* implied */
> >> break;
> >> @@ -475,10 +475,6 @@ static int run_specific_rebase(struct rebase_options *opts)
> >> backend = "git-rebase--am";
> >> backend_func = "git_rebase__am";
> >> break;
> >> - case REBASE_MERGE:
> >> - backend = "git-rebase--merge";
> >> - backend_func = "git_rebase__merge";
> >> - break;
> >> case REBASE_PRESERVE_MERGES:
> >> backend = "git-rebase--preserve-merges";
> >> backend_func = "git_rebase__preserve_merges";
> >> @@ -1156,6 +1152,10 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
> >> }
> >> }
> >>
> >> + if (options.type == REBASE_MERGE) {
> >> + imply_interactive(&options, "--merge");
> >> + }
> >> +
> >> if (options.root && !options.onto_name)
> >> imply_interactive(&options, "--root without --onto");
> >>
> >
> > Okay, this makes sense.
> >
> >> diff --git a/git-legacy-rebase.sh b/git-legacy-rebase.sh
> >> index da27bfca5a..4abcceed06 100755
> >> --- a/git-legacy-rebase.sh
> >> +++ b/git-legacy-rebase.sh
> >> @@ -218,6 +218,7 @@ then
> >> state_dir="$apply_dir"
> >> elif test -d "$merge_dir"
> >> then
> >> + type=interactive
> >> if test -d "$merge_dir"/rewritten
> >> then
> >> type=preserve-merges
> >> @@ -225,10 +226,7 @@ then
> >> preserve_merges=t
> >> elif test -f "$merge_dir"/interactive
> >> then
> >> - type=interactive
> >> interactive_rebase=explicit
> >> - else
> >> - type=merge
> >> fi
> >> state_dir="$merge_dir"
> >> fi
> >> @@ -469,6 +467,7 @@ then
> >> test -z "$interactive_rebase" && interactive_rebase=implied
> >> fi
> >>
> >> +actually_interactive=
> >> if test -n "$interactive_rebase"
> >> then
> >> if test -z "$preserve_merges"
> >> @@ -477,11 +476,12 @@ then
> >> else
> >> type=preserve-merges
> >> fi
> >> -
> >> + actually_interactive=t
> >> state_dir="$merge_dir"
> >> elif test -n "$do_merge"
> >> then
> >> - type=merge
> >> + interactive_rebase=implied
> >> + type=interactive
> >> state_dir="$merge_dir"
> >> else
> >> type=am
> >> @@ -493,21 +493,13 @@ then
> >> git_format_patch_opt="$git_format_patch_opt --progress"
> >> fi
> >>
> >> -if test -n "$git_am_opt"; then
> >> - incompatible_opts=$(echo " $git_am_opt " | \
> >> - sed -e 's/ -q / /g' -e 's/^ \(.*\) $/\1/')
> >> - if test -n "$interactive_rebase"
> >> +incompatible_opts=$(echo " $git_am_opt " | \
> >> + sed -e 's/ -q / /g' -e 's/^ \(.*\) $/\1/')
> >
> > Why are we no longer guarding this behind the condition that the user
> > specified *any* option intended for the `am` backend?
>
> I was confused by this as well, what if the user asks for 'rebase
> --exec=<cmd> --ignore-whitespace'?
>
> >
> >> +if test -n "$incompatible_opts"
> >> +then
> >> + if test -n "$actually_interactive" || test "$do_merge"
> >> 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)")"
> >> - 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)")"
> >> - fi
> >> + die "$(gettext "error: cannot combine am options ($incompatible_opts) with either interactive or merge options")"
> >> fi
> >> fi
> >>
>
> If you want to change the error message here, I think you need to change
> the corresponding message in builtin/rebase.c
>
> Best Wishes
>
> Phillip
>
> >
> > The rest of this hunk makes sense.
> >
> >> @@ -672,7 +664,7 @@ require_clean_work_tree "rebase" "$(gettext "Please commit or stash them.")"
> >> # but this should be done only when upstream and onto are the same
> >> # and if this is not an interactive rebase.
> >> mb=$(git merge-base "$onto" "$orig_head")
> >> -if test -z "$interactive_rebase" && test "$upstream" = "$onto" &&
> >> +if test -z "$actually_interactive" && test "$upstream" = "$onto" &&
> >> test "$mb" = "$onto" && test -z "$restrict_revision" &&
> >> # linear history?
> >> ! (git rev-list --parents "$onto".."$orig_head" | sane_grep " .* ") > /dev/null
> >> @@ -716,6 +708,19 @@ then
> >> GIT_PAGER='' git diff --stat --summary "$mb" "$onto"
> >> fi
> >>
> >> +if test -z "$actually_interactive" && test "$mb" = "$orig_head"
> >> +then
> >> + # If the $onto is a proper descendant of the tip of the branch, then
> >> + # we just fast-forwarded.
> >
> > This comment is misleading if it comes before, rather than after, the
> > actual `checkout -q` command.
> >
> >> + say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")"
> >> + GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
> >> + git checkout -q "$onto^0" || die "could not detach HEAD"
> >> + git update-ref ORIG_HEAD $orig_head
> >> + move_to_original_branch
> >> + finish_rebase
> >> + exit 0
> >> +fi
> >> +
> >> test -n "$interactive_rebase" && run_specific_rebase
> >>
> >> # Detach HEAD and reset the tree
> >> @@ -725,16 +730,6 @@ GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \
> >> git checkout -q "$onto^0" || die "could not detach HEAD"
> >> git update-ref ORIG_HEAD $orig_head
> >
> > It is a pity that this hunk header hides the lines that you copied into
> > the following conditional before moving it before the "if interactive, run
> > it" line:
> >
> >>
> >> -# If the $onto is a proper descendant of the tip of the branch, then
> >> -# we just fast-forwarded.
> >> -if test "$mb" = "$orig_head"
> >> -then
> >> - say "$(eval_gettext "Fast-forwarded \$branch_name to \$onto_name.")"
> >> - move_to_original_branch
> >> - finish_rebase
> >> - exit 0
> >> -fi
> >> -
> >> if test -n "$rebase_root"
> >> then
> >> revisions="$onto..$orig_head"
> >
> > What you did is correct, if duplicating code, and definitely the easiest
> > way to do it. Just move the comment, and we're good here.
> >
> >> diff --git a/git-rebase--merge.sh b/git-rebase--merge.sh
> >> deleted file mode 100644
> >> [... snip ...]
> >
> > Nice. Really nice!
> >
> >> diff --git a/t/t3406-rebase-message.sh b/t/t3406-rebase-message.sh
> >> index 0392e36d23..04d6c71899 100755
> >> --- a/t/t3406-rebase-message.sh
> >> +++ b/t/t3406-rebase-message.sh
> >> @@ -17,14 +17,9 @@ test_expect_success 'setup' '
> >> git tag start
> >> '
> >>
> >> -cat >expect <<\EOF
> >> -Already applied: 0001 A
> >> -Already applied: 0002 B
> >> -Committed: 0003 Z
> >> -EOF
> >> -
> >
> > As I had mentioned in the previous round: I think we can retain these
> > messages for the `--merge` mode. And I think we should: users of --merge
> > have most likely become to expect them.
> >
> > The most elegant way would probably be by adding code to the sequencer
> > that outputs these lines if in "merge" mode (and add a flag to say that we
> > *are* in "merge" mode).
> >
> > To that end, the `make_script()` function would not generate `# pick` but
> > `drop` lines, I think, so that the sequencer can see those and print the
> > `Already applied: <message>` lines. And a successful `TODO_PICK` would
> > write out `Committed: <message>`.
> >
> >> test_expect_success 'rebase -m' '
> >> git rebase -m master >report &&
> >> + >expect &&
> >> sed -n -e "/^Already applied: /p" \
> >> -e "/^Committed: /p" report >actual &&
> >> test_cmp expect actual
> >> diff --git a/t/t3420-rebase-autostash.sh b/t/t3420-rebase-autostash.sh
> >> index f355c6825a..49077200c5 100755
> >> --- a/t/t3420-rebase-autostash.sh
> >> +++ b/t/t3420-rebase-autostash.sh
> >> @@ -53,41 +53,6 @@ create_expected_success_interactive () {
> >> EOF
> >> }
> >>
> >> -create_expected_success_merge () {
> >> - cat >expected <<-EOF
> >> - $(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
> >> - HEAD is now at $(git rev-parse --short feature-branch) third commit
> >> - First, rewinding head to replay your work on top of it...
> >> - Merging unrelated-onto-branch with HEAD~1
> >> - Merging:
> >> - $(git rev-parse --short unrelated-onto-branch) unrelated commit
> >> - $(git rev-parse --short feature-branch^) second commit
> >> - found 1 common ancestor:
> >> - $(git rev-parse --short feature-branch~2) initial commit
> >> - [detached HEAD $(git rev-parse --short rebased-feature-branch~1)] second commit
> >> - Author: A U Thor <author@example.com>
> >> - Date: Thu Apr 7 15:14:13 2005 -0700
> >> - 2 files changed, 2 insertions(+)
> >> - create mode 100644 file1
> >> - create mode 100644 file2
> >> - Committed: 0001 second commit
> >> - Merging unrelated-onto-branch with HEAD~0
> >> - Merging:
> >> - $(git rev-parse --short rebased-feature-branch~1) second commit
> >> - $(git rev-parse --short feature-branch) third commit
> >> - found 1 common ancestor:
> >> - $(git rev-parse --short feature-branch~1) second commit
> >> - [detached HEAD $(git rev-parse --short rebased-feature-branch)] third commit
> >> - Author: A U Thor <author@example.com>
> >> - Date: Thu Apr 7 15:15:13 2005 -0700
> >> - 1 file changed, 1 insertion(+)
> >> - create mode 100644 file3
> >> - Committed: 0002 third commit
> >> - All done.
> >> - Applied autostash.
> >> - EOF
> >> -}
> >> -
> >> create_expected_failure_am () {
> >> cat >expected <<-EOF
> >> $(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
> >> @@ -112,43 +77,6 @@ create_expected_failure_interactive () {
> >> EOF
> >> }
> >>
> >> -create_expected_failure_merge () {
> >> - cat >expected <<-EOF
> >> - $(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
> >> - HEAD is now at $(git rev-parse --short feature-branch) third commit
> >> - First, rewinding head to replay your work on top of it...
> >> - Merging unrelated-onto-branch with HEAD~1
> >> - Merging:
> >> - $(git rev-parse --short unrelated-onto-branch) unrelated commit
> >> - $(git rev-parse --short feature-branch^) second commit
> >> - found 1 common ancestor:
> >> - $(git rev-parse --short feature-branch~2) initial commit
> >> - [detached HEAD $(git rev-parse --short rebased-feature-branch~1)] second commit
> >> - Author: A U Thor <author@example.com>
> >> - Date: Thu Apr 7 15:14:13 2005 -0700
> >> - 2 files changed, 2 insertions(+)
> >> - create mode 100644 file1
> >> - create mode 100644 file2
> >> - Committed: 0001 second commit
> >> - Merging unrelated-onto-branch with HEAD~0
> >> - Merging:
> >> - $(git rev-parse --short rebased-feature-branch~1) second commit
> >> - $(git rev-parse --short feature-branch) third commit
> >> - found 1 common ancestor:
> >> - $(git rev-parse --short feature-branch~1) second commit
> >> - [detached HEAD $(git rev-parse --short rebased-feature-branch)] third commit
> >> - Author: A U Thor <author@example.com>
> >> - Date: Thu Apr 7 15:15:13 2005 -0700
> >> - 1 file changed, 1 insertion(+)
> >> - create mode 100644 file3
> >> - Committed: 0002 third commit
> >> - All done.
> >> - Applying autostash resulted in conflicts.
> >> - Your changes are safe in the stash.
> >> - You can run "git stash pop" or "git stash drop" at any time.
> >> - EOF
> >> -}
> >> -
> >> testrebase () {
> >> type=$1
> >> dotest=$2
> >> @@ -177,6 +105,9 @@ testrebase () {
> >> test_expect_success "rebase$type --autostash: check output" '
> >> test_when_finished git branch -D rebased-feature-branch &&
> >> suffix=${type#\ --} && suffix=${suffix:-am} &&
> >> + if test ${suffix} = "merge"; then
> >> + suffix=interactive
> >> + fi &&
> >> create_expected_success_$suffix &&
> >> test_i18ncmp expected actual
> >> '
> >> @@ -274,6 +205,9 @@ testrebase () {
> >> test_expect_success "rebase$type: check output with conflicting stash" '
> >> test_when_finished git branch -D rebased-feature-branch &&
> >> suffix=${type#\ --} && suffix=${suffix:-am} &&
> >> + if test ${suffix} = "merge"; then
> >> + suffix=interactive
> >> + fi &&
> >> create_expected_failure_$suffix &&
> >> test_i18ncmp expected actual
> >> '
> >
> > As I stated earlier, I am uncomfortable with this solution. We change
> > behavior rather noticeably, and the regression test tells us the same. We
> > need to either try to deprecate `git rebase --merge`, or we need to at
> > least attempt to recreate the old behavior with the sequencer.
> >
> >> diff --git a/t/t3421-rebase-topology-linear.sh b/t/t3421-rebase-topology-linear.sh
> >> index 99b2aac921..911ef49f70 100755
> >> --- a/t/t3421-rebase-topology-linear.sh
> >> +++ b/t/t3421-rebase-topology-linear.sh
> >> @@ -111,7 +111,7 @@ test_run_rebase () {
> >> "
> >> }
> >> test_run_rebase success ''
> >> -test_run_rebase failure -m
> >> +test_run_rebase success -m
> >> test_run_rebase success -i
> >> test_run_rebase success -p
> >>
> >> @@ -126,7 +126,7 @@ test_run_rebase () {
> >> "
> >> }
> >> test_run_rebase success ''
> >> -test_run_rebase failure -m
> >> +test_run_rebase success -m
> >> test_run_rebase success -i
> >> test_run_rebase success -p
> >>
> >> @@ -141,7 +141,7 @@ test_run_rebase () {
> >> "
> >> }
> >> test_run_rebase success ''
> >> -test_run_rebase failure -m
> >> +test_run_rebase success -m
> >> test_run_rebase success -i
> >> test_run_rebase success -p
> >>
> >> @@ -284,7 +284,7 @@ test_run_rebase () {
> >> "
> >> }
> >> test_run_rebase success ''
> >> -test_run_rebase failure -m
> >> +test_run_rebase success -m
> >> test_run_rebase success -i
> >> test_run_rebase success -p
> >>
> >> @@ -315,7 +315,7 @@ test_run_rebase () {
> >> "
> >> }
> >> test_run_rebase success ''
> >> -test_run_rebase failure -m
> >> +test_run_rebase success -m
> >> test_run_rebase success -i
> >> test_run_rebase failure -p
> >>
> >
> > Nice.
> >
> >> diff --git a/t/t3425-rebase-topology-merges.sh b/t/t3425-rebase-topology-merges.sh
> >> index 846f85c27e..cd505c0711 100755
> >> --- a/t/t3425-rebase-topology-merges.sh
> >> +++ b/t/t3425-rebase-topology-merges.sh
> >> @@ -72,7 +72,7 @@ test_run_rebase () {
> >> }
> >> #TODO: make order consistent across all flavors of rebase
> >> test_run_rebase success 'e n o' ''
> >> -test_run_rebase success 'e n o' -m
> >> +test_run_rebase success 'n o e' -m
> >> test_run_rebase success 'n o e' -i
> >>
> >> test_run_rebase () {
> >> @@ -89,7 +89,7 @@ test_run_rebase () {
> >> }
> >> #TODO: make order consistent across all flavors of rebase
> >> test_run_rebase success 'd e n o' ''
> >> -test_run_rebase success 'd e n o' -m
> >> +test_run_rebase success 'd n o e' -m
> >> test_run_rebase success 'd n o e' -i
> >>
> >> test_run_rebase () {
> >> @@ -106,7 +106,7 @@ test_run_rebase () {
> >> }
> >> #TODO: make order consistent across all flavors of rebase
> >> test_run_rebase success 'd e n o' ''
> >> -test_run_rebase success 'd e n o' -m
> >> +test_run_rebase success 'd n o e' -m
> >> test_run_rebase success 'd n o e' -i
> >>
> >> test_expect_success "rebase -p is no-op in non-linear history" "
> >
> > This is a bit unfortunate. I wonder if we could do something like this, to
> > retain the current behavior:
> >
> > -- snip --
> > diff --git a/sequencer.c b/sequencer.c
> > index 9e1ab3a2a7..5018957e49 100644
> > --- a/sequencer.c
> > +++ b/sequencer.c
> > @@ -4394,7 +4394,8 @@ int sequencer_make_script(FILE *out, int argc, const char **argv,
> > revs.reverse = 1;
> > revs.right_only = 1;
> > revs.sort_order = REV_SORT_IN_GRAPH_ORDER;
> > - revs.topo_order = 1;
> > + if (!(flags & TODO_LIST_NO_TOPO_ORDER))
> > + revs.topo_order = 1;
> >
> > revs.pretty_given = 1;
> > git_config_get_string("rebase.instructionFormat", &format);
> > -- snap -
> >
> > (and then pass TODO_LIST_NO_TOPO_ORDER if in "merge" mode)?
> >
> >> diff --git a/t/t5407-post-rewrite-hook.sh b/t/t5407-post-rewrite-hook.sh
> >> index 9b2a274c71..145c61251d 100755
> >> --- a/t/t5407-post-rewrite-hook.sh
> >> +++ b/t/t5407-post-rewrite-hook.sh
> >> @@ -120,6 +120,7 @@ test_expect_success 'git rebase -m --skip' '
> >> git rebase --continue &&
> >> echo rebase >expected.args &&
> >> cat >expected.data <<-EOF &&
> >> + $(git rev-parse C) $(git rev-parse HEAD^)
> >> $(git rev-parse D) $(git rev-parse HEAD)
> >> EOF
> >> verify_hook_input
> >
> > This suggests to me that we call `commit` too many times. I think we
> > really need to address this without changing the test. This is a change in
> > behavior.
> >
> >> diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
> >> index 81a5179e28..5cadedb2a9 100755
> >> --- a/t/t9903-bash-prompt.sh
> >> +++ b/t/t9903-bash-prompt.sh
> >> @@ -180,7 +180,7 @@ test_expect_success 'prompt - interactive rebase' '
> >> '
> >>
> >> test_expect_success 'prompt - rebase merge' '
> >> - printf " (b2|REBASE-m 1/3)" >expected &&
> >> + printf " (b2|REBASE-i 1/3)" >expected &&
> >
> > As I said, this should be easily addressed by having a tell-tale in
> > $state_dir/. Come to think of it, we must have had one, right? Let's see
> > how the bash-prompt does it.
> >
> > *clicketyclick*
> >
> > Ah, it is the *absence* of the `interactive` file... Which makes me wonder
> > whether we should not simply retain that behavior for `git rebase
> > --merge`?
> >
> >> git checkout b2 &&
> >> test_when_finished "git checkout master" &&
> >> test_must_fail git rebase --merge b1 b2 &&
> >> --
> >> 2.19.1.858.g526e8fe740.dirty
> >>
> >>
> >
> > Thank you for this pleasant read. I think there is still quite a bit of
> > work to do, but you already did most of it.
> >
> > Out of curiosity, do you have a public repository with these patches in a
> > branch? (I might have an hour to play with it tonight...)
> >
> > Thanks!
> > Dscho
> >
>
>
next prev parent reply other threads:[~2018-11-13 9:18 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-08 6:01 [PATCH v2 0/2] Reimplement rebase --merge via interactive machinery Elijah Newren
2018-11-08 6:01 ` [PATCH v2 1/2] git-rebase, sequencer: extend --quiet option for the " Elijah Newren
2018-11-12 15:11 ` Johannes Schindelin
2018-11-08 6:01 ` [PATCH v2 2/2] rebase: Implement --merge via git-rebase--interactive Elijah Newren
2018-11-12 16:21 ` Johannes Schindelin
2018-11-12 18:21 ` Phillip Wood
2018-11-13 9:18 ` Johannes Schindelin [this message]
2018-11-14 23:06 ` Elijah Newren
2018-11-13 16:06 ` Elijah Newren
2018-11-14 23:03 ` Elijah Newren
2018-11-15 12:27 ` Johannes Schindelin
2018-11-08 6:33 ` [PATCH v2 0/2] Reimplement rebase --merge via interactive machinery Elijah Newren
2018-11-22 4:48 ` [PATCH v3 0/7] " Elijah Newren
2018-11-22 4:48 ` [PATCH v3 1/7] rebase: fix incompatible options error message Elijah Newren
2018-11-28 8:28 ` Johannes Schindelin
2018-11-28 15:58 ` Elijah Newren
2018-11-28 16:12 ` Duy Nguyen
2018-11-28 16:31 ` Elijah Newren
2018-11-22 4:48 ` [PATCH v3 2/7] t5407: add a test demonstrating how interactive handles --skip differently Elijah Newren
2018-11-22 4:48 ` [PATCH v3 3/7] am, rebase--merge: do not overlook --skip'ed commits with post-rewrite Elijah Newren
2018-11-22 4:48 ` [PATCH v3 4/7] git-rebase, sequencer: extend --quiet option for the interactive machinery Elijah Newren
2018-11-22 4:48 ` [PATCH v3 5/7] git-legacy-rebase: simplify unnecessary triply-nested if Elijah Newren
2018-11-22 4:48 ` [PATCH v3 6/7] rebase: define linearization ordering and enforce it Elijah Newren
2018-11-22 4:48 ` [PATCH v3 7/7] rebase: Implement --merge via the interactive machinery Elijah Newren
2018-12-11 16:11 ` [PATCH v4 0/8] Reimplement rebase --merge via " Elijah Newren
2018-12-11 16:11 ` [PATCH v4 1/8] rebase: make builtin and legacy script error messages the same Elijah Newren
2018-12-11 16:11 ` [PATCH v4 2/8] rebase: fix incompatible options error message Elijah Newren
2018-12-11 16:11 ` [PATCH v4 3/8] t5407: add a test demonstrating how interactive handles --skip differently Elijah Newren
2018-12-11 16:11 ` [PATCH v4 4/8] am, rebase--merge: do not overlook --skip'ed commits with post-rewrite Elijah Newren
2019-01-21 16:07 ` Johannes Schindelin
2019-01-21 17:59 ` Elijah Newren
2019-01-21 18:11 ` Johannes Schindelin
2018-12-11 16:11 ` [PATCH v4 5/8] git-rebase, sequencer: extend --quiet option for the interactive machinery Elijah Newren
2019-01-21 16:10 ` Johannes Schindelin
2019-01-21 17:50 ` Elijah Newren
2019-01-21 18:19 ` Johannes Schindelin
2019-01-21 18:22 ` Johannes Schindelin
2019-01-22 20:39 ` Junio C Hamano
2019-02-20 11:00 ` Phillip Wood
2019-02-21 17:44 ` Elijah Newren
2018-12-11 16:11 ` [PATCH v4 6/8] git-legacy-rebase: simplify unnecessary triply-nested if Elijah Newren
2018-12-11 16:11 ` [PATCH v4 7/8] rebase: define linearization ordering and enforce it Elijah Newren
2018-12-11 16:11 ` [PATCH v4 8/8] rebase: Implement --merge via the interactive machinery Elijah Newren
2019-01-07 17:15 ` [PATCH v4 0/8] Reimplement rebase --merge via " Elijah Newren
2019-01-07 19:46 ` Junio C Hamano
2019-01-07 20:11 ` Junio C Hamano
2019-01-07 20:39 ` Elijah Newren
2019-01-11 18:36 ` Elijah Newren
2019-01-18 13:36 ` Johannes Schindelin
2019-01-18 14:22 ` Johannes Schindelin
2019-01-18 17:55 ` Junio C Hamano
2019-01-18 18:07 ` Elijah Newren
2019-01-18 21:03 ` Johannes Schindelin
2019-01-18 21:21 ` Junio C Hamano
2019-01-21 21:02 ` Johannes Schindelin
2019-01-21 16:03 ` Johannes Schindelin
2019-01-21 21:01 ` Johannes Schindelin
2019-01-21 21:04 ` Elijah Newren
2019-01-29 1:39 ` [PATCH v5 " Elijah Newren
2019-01-29 1:39 ` [PATCH v5 1/8] rebase: make builtin and legacy script error messages the same Elijah Newren
2019-01-29 1:39 ` [PATCH v5 2/8] rebase: fix incompatible options error message Elijah Newren
2019-01-29 1:39 ` [PATCH v5 3/8] t5407: add a test demonstrating how interactive handles --skip differently Elijah Newren
2019-01-29 1:39 ` [PATCH v5 4/8] am, rebase--merge: do not overlook --skip'ed commits with post-rewrite Elijah Newren
2019-01-29 1:39 ` [PATCH v5 5/8] git-rebase, sequencer: extend --quiet option for the interactive machinery Elijah Newren
2019-01-29 1:39 ` [PATCH v5 6/8] git-legacy-rebase: simplify unnecessary triply-nested if Elijah Newren
2019-01-29 1:39 ` [PATCH v5 7/8] rebase: define linearization ordering and enforce it Elijah Newren
2019-01-29 1:39 ` [PATCH v5 8/8] rebase: implement --merge via the interactive machinery Elijah Newren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=nycvar.QRO.7.76.6.1811131017250.39@tvgsbejvaqbjf.bet \
--to=johannes.schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=predatoramigo@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).