{"thread":{"id":"50996","subject":"[PATCH] rebase -r: always reword merge -c","startedAt":"2019-04-26T10:33:38Z","lastAt":"2019-05-19T01:32:49Z","messageCount":8,"participants":["Phillip Wood","Johannes Schindelin","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"374552","messageId":"20190426103332.9036-1-phillip.wood123@gmail.com","threadId":"50996","inReplyTo":null,"subject":"[PATCH] rebase -r: always reword merge -c","fromName":"Phillip Wood","fromEmail":"phillip.wood123@gmail.com","sentAt":"2019-04-26T10:33:32Z","receivedAt":"2019-04-26T10:33:38Z","isPatch":true,"sender":{"key":"phillip.wood@dunelm.org.uk","avatar":null},"body":"From: Phillip Wood <phillip.wood@dunelm.org.uk>\n\nIf a merge can be fast-forwarded then make sure that we still edit the\ncommit message if the user specifies -c. The implementation follows the\nsame pattern that is used for ordinary rewords that are fast-forwarded.\n\nSigned-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>\n---\n sequencer.c              |  5 +++++\n t/t3430-rebase-merges.sh | 10 ++++++++++\n 2 files changed, 15 insertions(+)\n\ndiff --git a/sequencer.c b/sequencer.c\nindex 0db410d590..ff8565e7a8 100644\n--- a/sequencer.c\n+++ b/sequencer.c\n@@ -3248,6 +3248,10 @@ static int do_merge(struct repository *r,\n \t\trollback_lock_file(&lock);\n \t\tret = fast_forward_to(r, &commit->object.oid,\n \t\t\t\t      &head_commit->object.oid, 0, opts);\n+\t\tif (flags & TODO_EDIT_MERGE_MSG) {\n+\t\t\trun_commit_flags |= AMEND_MSG;\n+\t\t\tgoto fast_forward_edit;\n+\t\t}\n \t\tgoto leave_merge;\n \t}\n \n@@ -3351,6 +3355,7 @@ static int do_merge(struct repository *r,\n \t\t * value (a negative one would indicate that the `merge`\n \t\t * command needs to be rescheduled).\n \t\t */\n+\tfast_forward_edit:\n \t\tret = !!run_git_commit(r, git_path_merge_msg(r), opts,\n \t\t\t\t       run_commit_flags);\n \ndiff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh\nindex 4c69255ee6..3d484a3c72 100755\n--- a/t/t3430-rebase-merges.sh\n+++ b/t/t3430-rebase-merges.sh\n@@ -164,6 +164,16 @@ test_expect_success 'failed `merge <branch>` does not crash' '\n \tgrep \"^Merge branch ${SQ}G${SQ}$\" .git/rebase-merge/message\n '\n \n+test_expect_success 'fast-forward merge -c still rewords' '\n+\tgit checkout -b fast-forward-merge-c H &&\n+\tset_fake_editor &&\n+\tFAKE_COMMIT_MESSAGE=edited GIT_SEQUENCE_EDITOR=\"echo merge -c H G >\" \\\n+\t\tgit rebase -ir @^ &&\n+\techo edited >expected &&\n+\tgit log --pretty=format:%B -1 >actual &&\n+\ttest_cmp expected actual\n+'\n+\n test_expect_success 'with a branch tip that was cherry-picked already' '\n \tgit checkout -b already-upstream master &&\n \tbase=\"$(git rev-parse --verify HEAD)\" &&\n-- \n2.21.0\n\n"},{"id":"374646","messageId":"nycvar.QRO.7.76.6.1904291208210.45@tvgsbejvaqbjf.bet","threadId":"50996","inReplyTo":"20190426103332.9036-1-phillip.wood123@gmail.com","subject":"Re: [PATCH] rebase -r: always reword merge -c","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2019-04-29T16:14:29Z","receivedAt":"2019-04-29T16:15:14Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Phillip,\n\nOn Fri, 26 Apr 2019, Phillip Wood wrote:\n\n> From: Phillip Wood <phillip.wood@dunelm.org.uk>\n>\n> If a merge can be fast-forwarded then make sure that we still edit the\n> commit message if the user specifies -c. The implementation follows the\n> same pattern that is used for ordinary rewords that are fast-forwarded.\n>\n> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>\n> ---\n\nOMG I was bitten twice by this very bug in the past week, and planned on\nlooking into it next week. Thanks for beating me to it.\n\nTwo comments:\n\n> diff --git a/sequencer.c b/sequencer.c\n> index 0db410d590..ff8565e7a8 100644\n> --- a/sequencer.c\n> +++ b/sequencer.c\n> @@ -3248,6 +3248,10 @@ static int do_merge(struct repository *r,\n>  \t\trollback_lock_file(&lock);\n>  \t\tret = fast_forward_to(r, &commit->object.oid,\n>  \t\t\t\t      &head_commit->object.oid, 0, opts);\n> +\t\tif (flags & TODO_EDIT_MERGE_MSG) {\n> +\t\t\trun_commit_flags |= AMEND_MSG;\n> +\t\t\tgoto fast_forward_edit;\n> +\t\t}\n>  \t\tgoto leave_merge;\n>  \t}\n>\n> @@ -3351,6 +3355,7 @@ static int do_merge(struct repository *r,\n>  \t\t * value (a negative one would indicate that the `merge`\n>  \t\t * command needs to be rescheduled).\n>  \t\t */\n> +\tfast_forward_edit:\n\nIt is *slightly* awkward that this is an `else` arm of an `if (ret)`, but\nI do not necessarily think that it would be better to move the label\nbefore the `if` than what you did; Your version comes out more readable,\nstill.\n\n>  \t\tret = !!run_git_commit(r, git_path_merge_msg(r), opts,\n>  \t\t\t\t       run_commit_flags);\n>\n> diff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh\n> index 4c69255ee6..3d484a3c72 100755\n> --- a/t/t3430-rebase-merges.sh\n> +++ b/t/t3430-rebase-merges.sh\n> @@ -164,6 +164,16 @@ test_expect_success 'failed `merge <branch>` does not crash' '\n>  \tgrep \"^Merge branch ${SQ}G${SQ}$\" .git/rebase-merge/message\n>  '\n>\n> +test_expect_success 'fast-forward merge -c still rewords' '\n> +\tgit checkout -b fast-forward-merge-c H &&\n> +\tset_fake_editor &&\n\nset_fake_editor affects global state AFAIR (setting and exporting\n`EDITOR`), therefore this would need to be run in a subshell, i.e.\nenclosed in parentheses.\n\n> +\tFAKE_COMMIT_MESSAGE=edited GIT_SEQUENCE_EDITOR=\"echo merge -c H G >\" \\\n> +\t\tgit rebase -ir @^ &&\n> +\techo edited >expected &&\n> +\tgit log --pretty=format:%B -1 >actual &&\n> +\ttest_cmp expected actual\n> +'\n> +\n\nThe rest looks good, thank you!\nDscho\n\n>  test_expect_success 'with a branch tip that was cherry-picked already' '\n>  \tgit checkout -b already-upstream master &&\n>  \tbase=\"$(git rev-parse --verify HEAD)\" &&\n> --\n> 2.21.0\n>\n>\n"},{"id":"374697","messageId":"a226ffff-212b-d81c-11fd-bb496b84a78d@gmail.com","threadId":"50996","inReplyTo":"nycvar.QRO.7.76.6.1904291208210.45@tvgsbejvaqbjf.bet","subject":"Re: [PATCH] rebase -r: always reword merge -c","fromName":"Phillip Wood","fromEmail":"phillip.wood123@gmail.com","sentAt":"2019-04-30T09:01:52Z","receivedAt":"2019-04-30T09:01:58Z","isPatch":true,"sender":{"key":"phillip.wood@dunelm.org.uk","avatar":null},"body":"Hi Dscho\n\nOn 29/04/2019 17:14, Johannes Schindelin wrote:\n> Hi Phillip,\n> \n> On Fri, 26 Apr 2019, Phillip Wood wrote:\n> \n>> From: Phillip Wood <phillip.wood@dunelm.org.uk>\n>>\n>> If a merge can be fast-forwarded then make sure that we still edit the\n>> commit message if the user specifies -c. The implementation follows the\n>> same pattern that is used for ordinary rewords that are fast-forwarded.\n>>\n>> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>\n>> ---\n> \n> OMG I was bitten twice by this very bug in the past week, and planned on\n> looking into it next week. Thanks for beating me to it.\n> \n> Two comments:\n> \n>> diff --git a/sequencer.c b/sequencer.c\n>> index 0db410d590..ff8565e7a8 100644\n>> --- a/sequencer.c\n>> +++ b/sequencer.c\n>> @@ -3248,6 +3248,10 @@ static int do_merge(struct repository *r,\n>>   \t\trollback_lock_file(&lock);\n>>   \t\tret = fast_forward_to(r, &commit->object.oid,\n>>   \t\t\t\t      &head_commit->object.oid, 0, opts);\n>> +\t\tif (flags & TODO_EDIT_MERGE_MSG) {\n>> +\t\t\trun_commit_flags |= AMEND_MSG;\n>> +\t\t\tgoto fast_forward_edit;\n>> +\t\t}\n>>   \t\tgoto leave_merge;\n>>   \t}\n>>\n>> @@ -3351,6 +3355,7 @@ static int do_merge(struct repository *r,\n>>   \t\t * value (a negative one would indicate that the `merge`\n>>   \t\t * command needs to be rescheduled).\n>>   \t\t */\n>> +\tfast_forward_edit:\n> \n> It is *slightly* awkward that this is an `else` arm of an `if (ret)`, but\n> I do not necessarily think that it would be better to move the label\n> before the `if` than what you did; Your version comes out more readable,\n> still.\n\nI did wonder about adding braces but I'm not sure that makes it any \nclearer. I agree having the label before the `if (ret)` would be less \nclear as the reader has to then think what ret will be in that case to \nwork out what will happen.\n\n>>   \t\tret = !!run_git_commit(r, git_path_merge_msg(r), opts,\n>>   \t\t\t\t       run_commit_flags);\n>>\n>> diff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh\n>> index 4c69255ee6..3d484a3c72 100755\n>> --- a/t/t3430-rebase-merges.sh\n>> +++ b/t/t3430-rebase-merges.sh\n>> @@ -164,6 +164,16 @@ test_expect_success 'failed `merge <branch>` does not crash' '\n>>   \tgrep \"^Merge branch ${SQ}G${SQ}$\" .git/rebase-merge/message\n>>   '\n>>\n>> +test_expect_success 'fast-forward merge -c still rewords' '\n>> +\tgit checkout -b fast-forward-merge-c H &&\n>> +\tset_fake_editor &&\n> \n> set_fake_editor affects global state AFAIR (setting and exporting\n> `EDITOR`), therefore this would need to be run in a subshell, i.e.\n> enclosed in parentheses.\n\nThe other test files are not very consistent about that. I'll re-roll. \nNote that I do not export any FAKE_* variables, so later tests should \nnot be affected even if the fake editor runs.\n\nBest Wishes\n\nPhillip\n>> +\tFAKE_COMMIT_MESSAGE=edited GIT_SEQUENCE_EDITOR=\"echo merge -c H G >\" \\\n>> +\t\tgit rebase -ir @^ &&\n>> +\techo edited >expected &&\n>> +\tgit log --pretty=format:%B -1 >actual &&\n>> +\ttest_cmp expected actual\n>> +'\n>> +\n> \n> The rest looks good, thank you!\n> Dscho\n> \n>>   test_expect_success 'with a branch tip that was cherry-picked already' '\n>>   \tgit checkout -b already-upstream master &&\n>>   \tbase=\"$(git rev-parse --verify HEAD)\" &&\n>> --\n>> 2.21.0\n>>\n>>\n"},{"id":"374731","messageId":"nycvar.QRO.7.76.6.1904301850310.45@tvgsbejvaqbjf.bet","threadId":"50996","inReplyTo":"a226ffff-212b-d81c-11fd-bb496b84a78d@gmail.com","subject":"Re: [PATCH] rebase -r: always reword merge -c","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2019-04-30T22:51:38Z","receivedAt":"2019-04-30T22:51:47Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Phillip,\n\nOn Tue, 30 Apr 2019, Phillip Wood wrote:\n\n> On 29/04/2019 17:14, Johannes Schindelin wrote:\n> > Hi Phillip,\n> >\n> > On Fri, 26 Apr 2019, Phillip Wood wrote:\n> >\n> > >     ret = !!run_git_commit(r, git_path_merge_msg(r), opts,\n> > >              run_commit_flags);\n> > >\n> > > diff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh\n> > > index 4c69255ee6..3d484a3c72 100755\n> > > --- a/t/t3430-rebase-merges.sh\n> > > +++ b/t/t3430-rebase-merges.sh\n> > > @@ -164,6 +164,16 @@ test_expect_success 'failed `merge <branch>` does not\n> > > crash' '\n> > >   \tgrep \"^Merge branch ${SQ}G${SQ}$\" .git/rebase-merge/message\n> > >   '\n> > >\n> > > +test_expect_success 'fast-forward merge -c still rewords' '\n> > > +\tgit checkout -b fast-forward-merge-c H &&\n> > > +\tset_fake_editor &&\n> >\n> > set_fake_editor affects global state AFAIR (setting and exporting\n> > `EDITOR`), therefore this would need to be run in a subshell, i.e.\n> > enclosed in parentheses.\n>\n> The other test files are not very consistent about that. I'll re-roll. Note\n> that I do not export any FAKE_* variables, so later tests should not be\n> affected even if the fake editor runs.\n\nAFAIR I tried my best to avoid `set_fake_editor` altogether and instead\npreferred `write_script`/`test_config core.editor` combos in t3430.\n\nCiao,\nDscho\n"},{"id":"374809","messageId":"20190502102249.9071-1-phillip.wood123@gmail.com","threadId":"50996","inReplyTo":"a226ffff-212b-d81c-11fd-bb496b84a78d@gmail.com","subject":"[PATCH v2] rebase -r: always reword merge -c","fromName":"Phillip Wood","fromEmail":"phillip.wood123@gmail.com","sentAt":"2019-05-02T10:22:49Z","receivedAt":"2019-05-02T10:23:11Z","isPatch":true,"sender":{"key":"phillip.wood@dunelm.org.uk","avatar":null},"body":"From: Phillip Wood <phillip.wood@dunelm.org.uk>\n\nIf a merge can be fast-forwarded then make sure that we still edit the\ncommit message if the user specifies -c. The implementation follows the\nsame pattern that is used for ordinary rewords that are fast-forwarded.\n\nSigned-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>\n---\nThanks to Dscho for his comments on v1, I've changed the test as he suggested.\n\nRange-diff:\n1:  0532b70644 ! 1:  738799241a rebase -r: always reword merge -c\n    @@ -40,9 +40,12 @@\n      \n     +test_expect_success 'fast-forward merge -c still rewords' '\n     +  git checkout -b fast-forward-merge-c H &&\n    -+  set_fake_editor &&\n    -+  FAKE_COMMIT_MESSAGE=edited GIT_SEQUENCE_EDITOR=\"echo merge -c H G >\" \\\n    -+          git rebase -ir @^ &&\n    ++  (\n    ++          set_fake_editor &&\n    ++          FAKE_COMMIT_MESSAGE=edited \\\n    ++                  GIT_SEQUENCE_EDITOR=\"echo merge -c H G >\" \\\n    ++                  git rebase -ir @^\n    ++  ) &&\n     +  echo edited >expected &&\n     +  git log --pretty=format:%B -1 >actual &&\n     +  test_cmp expected actual\n\n sequencer.c              |  5 +++++\n t/t3430-rebase-merges.sh | 13 +++++++++++++\n 2 files changed, 18 insertions(+)\n\ndiff --git a/sequencer.c b/sequencer.c\nindex 0db410d590..ff8565e7a8 100644\n--- a/sequencer.c\n+++ b/sequencer.c\n@@ -3248,6 +3248,10 @@ static int do_merge(struct repository *r,\n \t\trollback_lock_file(&lock);\n \t\tret = fast_forward_to(r, &commit->object.oid,\n \t\t\t\t      &head_commit->object.oid, 0, opts);\n+\t\tif (flags & TODO_EDIT_MERGE_MSG) {\n+\t\t\trun_commit_flags |= AMEND_MSG;\n+\t\t\tgoto fast_forward_edit;\n+\t\t}\n \t\tgoto leave_merge;\n \t}\n \n@@ -3351,6 +3355,7 @@ static int do_merge(struct repository *r,\n \t\t * value (a negative one would indicate that the `merge`\n \t\t * command needs to be rescheduled).\n \t\t */\n+\tfast_forward_edit:\n \t\tret = !!run_git_commit(r, git_path_merge_msg(r), opts,\n \t\t\t\t       run_commit_flags);\n \ndiff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh\nindex 4c69255ee6..01238d4b6e 100755\n--- a/t/t3430-rebase-merges.sh\n+++ b/t/t3430-rebase-merges.sh\n@@ -164,6 +164,19 @@ test_expect_success 'failed `merge <branch>` does not crash' '\n \tgrep \"^Merge branch ${SQ}G${SQ}$\" .git/rebase-merge/message\n '\n \n+test_expect_success 'fast-forward merge -c still rewords' '\n+\tgit checkout -b fast-forward-merge-c H &&\n+\t(\n+\t\tset_fake_editor &&\n+\t\tFAKE_COMMIT_MESSAGE=edited \\\n+\t\t\tGIT_SEQUENCE_EDITOR=\"echo merge -c H G >\" \\\n+\t\t\tgit rebase -ir @^\n+\t) &&\n+\techo edited >expected &&\n+\tgit log --pretty=format:%B -1 >actual &&\n+\ttest_cmp expected actual\n+'\n+\n test_expect_success 'with a branch tip that was cherry-picked already' '\n \tgit checkout -b already-upstream master &&\n \tbase=\"$(git rev-parse --verify HEAD)\" &&\n-- \n2.21.0\n\n"},{"id":"374866","messageId":"nycvar.QRO.7.76.6.1905031123150.45@tvgsbejvaqbjf.bet","threadId":"50996","inReplyTo":"20190502102249.9071-1-phillip.wood123@gmail.com","subject":"Re: [PATCH v2] rebase -r: always reword merge -c","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2019-05-03T09:23:30Z","receivedAt":"2019-05-03T09:23:39Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Phillip,\n\nOn Thu, 2 May 2019, Phillip Wood wrote:\n\n> From: Phillip Wood <phillip.wood@dunelm.org.uk>\n>\n> If a merge can be fast-forwarded then make sure that we still edit the\n> commit message if the user specifies -c. The implementation follows the\n> same pattern that is used for ordinary rewords that are fast-forwarded.\n>\n> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>\n> ---\n\nACK!\n\nThank you,\nDscho\n"},{"id":"375789","messageId":"nycvar.QRO.7.76.6.1905170855000.46@tvgsbejvaqbjf.bet","threadId":"50996","inReplyTo":"20190502102249.9071-1-phillip.wood123@gmail.com","subject":"Re: [PATCH v2] rebase -r: always reword merge -c","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2019-05-17T06:56:42Z","receivedAt":"2019-05-17T06:56:42Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Junio,\n\nI think this one fell through the cracks (at least I failed to find it in\n`pu`), but I deem it a bug fix worthy of including in v2.22.0.\n\nCiao,\nDscho\n\n\nOn Thu, 2 May 2019, Phillip Wood wrote:\n\n> From: Phillip Wood <phillip.wood@dunelm.org.uk>\n>\n> If a merge can be fast-forwarded then make sure that we still edit the\n> commit message if the user specifies -c. The implementation follows the\n> same pattern that is used for ordinary rewords that are fast-forwarded.\n>\n> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>\n> ---\n> Thanks to Dscho for his comments on v1, I've changed the test as he suggested.\n>\n> Range-diff:\n> 1:  0532b70644 ! 1:  738799241a rebase -r: always reword merge -c\n>     @@ -40,9 +40,12 @@\n>\n>      +test_expect_success 'fast-forward merge -c still rewords' '\n>      +  git checkout -b fast-forward-merge-c H &&\n>     -+  set_fake_editor &&\n>     -+  FAKE_COMMIT_MESSAGE=edited GIT_SEQUENCE_EDITOR=\"echo merge -c H G >\" \\\n>     -+          git rebase -ir @^ &&\n>     ++  (\n>     ++          set_fake_editor &&\n>     ++          FAKE_COMMIT_MESSAGE=edited \\\n>     ++                  GIT_SEQUENCE_EDITOR=\"echo merge -c H G >\" \\\n>     ++                  git rebase -ir @^\n>     ++  ) &&\n>      +  echo edited >expected &&\n>      +  git log --pretty=format:%B -1 >actual &&\n>      +  test_cmp expected actual\n>\n>  sequencer.c              |  5 +++++\n>  t/t3430-rebase-merges.sh | 13 +++++++++++++\n>  2 files changed, 18 insertions(+)\n>\n> diff --git a/sequencer.c b/sequencer.c\n> index 0db410d590..ff8565e7a8 100644\n> --- a/sequencer.c\n> +++ b/sequencer.c\n> @@ -3248,6 +3248,10 @@ static int do_merge(struct repository *r,\n>  \t\trollback_lock_file(&lock);\n>  \t\tret = fast_forward_to(r, &commit->object.oid,\n>  \t\t\t\t      &head_commit->object.oid, 0, opts);\n> +\t\tif (flags & TODO_EDIT_MERGE_MSG) {\n> +\t\t\trun_commit_flags |= AMEND_MSG;\n> +\t\t\tgoto fast_forward_edit;\n> +\t\t}\n>  \t\tgoto leave_merge;\n>  \t}\n>\n> @@ -3351,6 +3355,7 @@ static int do_merge(struct repository *r,\n>  \t\t * value (a negative one would indicate that the `merge`\n>  \t\t * command needs to be rescheduled).\n>  \t\t */\n> +\tfast_forward_edit:\n>  \t\tret = !!run_git_commit(r, git_path_merge_msg(r), opts,\n>  \t\t\t\t       run_commit_flags);\n>\n> diff --git a/t/t3430-rebase-merges.sh b/t/t3430-rebase-merges.sh\n> index 4c69255ee6..01238d4b6e 100755\n> --- a/t/t3430-rebase-merges.sh\n> +++ b/t/t3430-rebase-merges.sh\n> @@ -164,6 +164,19 @@ test_expect_success 'failed `merge <branch>` does not crash' '\n>  \tgrep \"^Merge branch ${SQ}G${SQ}$\" .git/rebase-merge/message\n>  '\n>\n> +test_expect_success 'fast-forward merge -c still rewords' '\n> +\tgit checkout -b fast-forward-merge-c H &&\n> +\t(\n> +\t\tset_fake_editor &&\n> +\t\tFAKE_COMMIT_MESSAGE=edited \\\n> +\t\t\tGIT_SEQUENCE_EDITOR=\"echo merge -c H G >\" \\\n> +\t\t\tgit rebase -ir @^\n> +\t) &&\n> +\techo edited >expected &&\n> +\tgit log --pretty=format:%B -1 >actual &&\n> +\ttest_cmp expected actual\n> +'\n> +\n>  test_expect_success 'with a branch tip that was cherry-picked already' '\n>  \tgit checkout -b already-upstream master &&\n>  \tbase=\"$(git rev-parse --verify HEAD)\" &&\n> --\n> 2.21.0\n>\n>\n>\n"},{"id":"375867","messageId":"xmqqwoin1b5w.fsf@gitster-ct.c.googlers.com","threadId":"50996","inReplyTo":"nycvar.QRO.7.76.6.1905170855000.46@tvgsbejvaqbjf.bet","subject":"Re: [PATCH v2] rebase -r: always reword merge -c","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2019-05-19T01:32:43Z","receivedAt":"2019-05-19T01:32:49Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> I think this one fell through the cracks (at least I failed to find it in\n> `pu`),\n\nThanks, I think I was waiting for an Ack or two, but then the thread\nwas buried.\n\n"}]}