From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Elijah Newren via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, "Christian Couder" <chriscool@tuxfamily.org>,
"Derrick Stolee" <dstolee@microsoft.com>,
"Emily Shaffer" <emilyshaffer@google.com>,
"Eric Sunshine" <sunshine@sunshineco.com>,
"Jeff King" <peff@peff.net>,
"Jonathan Nieder" <jrnieder@gmail.com>,
"Jonathan Tan" <jonathantanmy@google.com>,
"Junio C Hamano" <gitster@pobox.com>,
"Phillip Wood" <phillip.wood@dunelm.org.uk>,
"René Scharfe" <l.s.r@web.de>, "Taylor Blau" <me@ttaylorr.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Elijah Newren" <newren@gmail.com>,
"Elijah Newren" <newren@gmail.com>
Subject: Re: [PATCH 1/2] Change default merge backend from recursive to ort
Date: Tue, 3 Aug 2021 00:46:02 +0200 (CEST) [thread overview]
Message-ID: <nycvar.QRO.7.76.6.2108030030000.55@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <8f6af8d494e0924aef4ae6963b8dca2228dad9b1.1627776462.git.gitgitgadget@gmail.com>
Hi Elijah,
On Sun, 1 Aug 2021, Elijah Newren via GitGitGadget wrote:
> From: Elijah Newren <newren@gmail.com>
>
> There are a few reasons to switch the default:
> [...]
I think it would be really fantastic to change to the new default right
after v2.33.0.
As to the patch, I only struggled slightly with the changes to
`sequencer.c`:
> diff --git a/sequencer.c b/sequencer.c
> index 0bec01cf38e..a98de9a8d15 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -636,7 +636,7 @@ static int do_recursive_merge(struct repository *r,
> for (i = 0; i < opts->xopts_nr; i++)
> parse_merge_opt(&o, opts->xopts[i]);
>
> - if (opts->strategy && !strcmp(opts->strategy, "ort")) {
> + if (!opts->strategy || strcmp(opts->strategy, "recursive")) {
At this stage, we're in `do_recursive_merge()`, and there is only one
caller, `do_pick_commit()`, and the caller is guarded by the following
condition:
else if (!opts->strategy ||
!strcmp(opts->strategy, "recursive") ||
!strcmp(opts->strategy, "ort") ||
command == TODO_REVERT) {
The issue I see is with `git revert` allowing custom merge strategies. I
_think_ we need a slightly different patch here, something like this:
- if (opts->strategy && !strcmp(opts->strategy, "ort")) {
+ if (!opts->strategy || !strcmp(opts->strategy, "ort")) {
> memset(&result, 0, sizeof(result));
> merge_incore_nonrecursive(&o, base_tree, head_tree, next_tree,
> &result);
> @@ -3968,7 +3968,7 @@ static int do_merge(struct repository *r,
> o.branch2 = ref_name.buf;
> o.buffer_output = 2;
>
> - if (opts->strategy && !strcmp(opts->strategy, "ort")) {
> + if (!opts->strategy || strcmp(opts->strategy, "recursive")) {
It took me a while to convince myself that this is correct. At least now I
_think_ it is correct: `do_merge()` defines:
const char *strategy = !opts->xopts_nr &&
(!opts->strategy ||
!strcmp(opts->strategy, "recursive") ||
!strcmp(opts->strategy, "ort")) ?
NULL : opts->strategy;
and then hands off to `git merge -s <strategy>` if `strategy` is set,
_before_ this hunk. Therefore we can be pretty certain that
`opts->strategy` is either not set, or "ort", or "recursive" at that
stage.
However, I think we could use the same idea I outlined in the previous
hunk, to make things more obvious:
- if (opts->strategy && !strcmp(opts->strategy, "ort")) {
+ if (!opts->strategy || !strcmp(opts->strategy, "ort")) {
Thank you,
Dscho
> /*
> * TODO: Should use merge_incore_recursive() and
> * merge_switch_to_result(), skipping the call to
> --
> gitgitgadget
>
>
next prev parent reply other threads:[~2021-08-02 22:46 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-01 0:07 [PATCH 0/2] [RFC] Switch default merge backend from recursive to ort Elijah Newren via GitGitGadget
2021-08-01 0:07 ` [PATCH 1/2] Change " Elijah Newren via GitGitGadget
2021-08-02 15:55 ` Ævar Arnfjörð Bjarmason
2021-08-02 16:33 ` Elijah Newren
2021-08-02 22:46 ` Johannes Schindelin [this message]
2021-08-03 1:04 ` Elijah Newren
2021-08-03 2:56 ` Philippe Blain
2021-08-03 3:39 ` Elijah Newren
2021-08-01 0:07 ` [PATCH 2/2] Update docs for change of default merge backend Elijah Newren via GitGitGadget
2021-08-02 14:59 ` Derrick Stolee
2021-08-03 14:39 ` Elijah Newren
2021-08-02 15:05 ` [PATCH 0/2] [RFC] Switch default merge backend from recursive to ort Derrick Stolee
2021-08-02 16:27 ` Elijah Newren
2021-08-02 18:03 ` Derrick Stolee
2021-08-03 15:56 ` Jeff King
2021-08-03 16:57 ` Elijah Newren
2021-08-03 17:13 ` Jeff King
2021-08-03 22:08 ` Junio C Hamano
2021-08-03 22:37 ` Jeff King
2021-08-03 22:48 ` Elijah Newren
2021-08-03 22:46 ` Elijah Newren
-- strict thread matches above, loose matches on Subject: below --
2021-08-04 5:38 [PATCH 0/2] " Elijah Newren via GitGitGadget
2021-08-04 5:38 ` [PATCH 1/2] Change " Elijah Newren via GitGitGadget
2021-08-09 17:38 ` Phillip Wood
2021-08-09 21:01 ` 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.2108030030000.55@tvgsbejvaqbjf.bet \
--to=johannes.schindelin@gmx.de \
--cc=avarab@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=dstolee@microsoft.com \
--cc=emilyshaffer@google.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=jrnieder@gmail.com \
--cc=l.s.r@web.de \
--cc=me@ttaylorr.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=phillip.wood@dunelm.org.uk \
--cc=sunshine@sunshineco.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).