From: Phillip Wood <phillip.wood@talktalk.net>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Elijah Newren <newren@gmail.com>
Cc: git@vger.kernel.org, gitster@pobox.com, predatoramigo@gmail.com
Subject: Re: [PATCH v2 2/2] rebase: Implement --merge via git-rebase--interactive
Date: Mon, 12 Nov 2018 18:21:12 +0000 [thread overview]
Message-ID: <f0231c21-8727-94cb-96aa-13ebfb5b7283@talktalk.net> (raw)
In-Reply-To: <nycvar.QRO.7.76.6.1811121614190.39@tvgsbejvaqbjf.bet>
Hi Elijah
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.
>
>> -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-12 18:21 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 [this message]
2018-11-13 9:18 ` Johannes Schindelin
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=f0231c21-8727-94cb-96aa-13ebfb5b7283@talktalk.net \
--to=phillip.wood@talktalk.net \
--cc=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).