From: Felipe Contreras <felipe.contreras@gmail.com>
To: Derrick Stolee <derrickstolee@github.com>,
Felipe Contreras <felipe.contreras@gmail.com>,
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>,
git@vger.kernel.org
Cc: gitster@pobox.com, me@ttaylorr.com, christian.couder@gmail.com
Subject: Re: [PATCH] merge-tree: load default git config
Date: Thu, 11 May 2023 16:07:32 -0600 [thread overview]
Message-ID: <645d672447ebb_13d3fe294f@chronos.notmuch> (raw)
In-Reply-To: <015dcb79-9630-e188-65cf-23b005184db1@github.com>
Derrick Stolee wrote:
> On 5/10/2023 4:30 PM, Felipe Contreras wrote:
> > Derrick Stolee via GitGitGadget wrote:
> >> From: Derrick Stolee <derrickstolee@github.com>
> >>
> >> The 'git merge-tree' command handles creating root trees for merges
> >> without using the worktree. This is a critical operation in many Git
> >> hosts, as they typically store bare repositories.
> >>
> >> This builtin does not load the default Git config, which can have
> >> several important ramifications.
> >
> > For the record, I had already sent a better version of this patch almost 2
> > years ago [1], not just for `git merge-tree`, but other commands as well.
> >
> > The obvious fix was completely ignored by the maintainer.
> >
> > The reason why it should be git_xmerge_config and not git_default_config, is
> > that merge.conflictstyle would not be parsed if you call git_default_config.
>
> As mentioned by Elijah in a different thread, the merge machinery loads
> the merge config as needed. I confirmed by creating this test, which I
> may submit as an independent patch:
I wrote my patches before Elijah wrote the real merge implementation, and in
his function he does `init_merge_options()`, which eventually calls
`git_config(git_xmerge_config, NULL)`.
But if `git_config()` is already called, you shouldn't need to add yet another
`git_config()` call.
The problem is that he added `init_merge_options()` *after* the
`get_merge_parent()` calls, that's why the configuration is ignored.
If we move `init_merge_options()` to the right place, the problem is fixed:
--- a/builtin/merge-tree.c
+++ b/builtin/merge-tree.c
@@ -424,6 +424,8 @@ static int real_merge(struct merge_tree_options *o,
struct merge_result result = { 0 };
int show_messages = o->show_messages;
+ init_merge_options(&opt, the_repository);
+
parent1 = get_merge_parent(branch1);
if (!parent1)
help_unknown_ref(branch1, "merge-tree",
@@ -434,8 +436,6 @@ static int real_merge(struct merge_tree_options *o,
help_unknown_ref(branch2, "merge-tree",
_("not something we can merge"));
- init_merge_options(&opt, the_repository);
-
opt.show_rename_progress = 0;
opt.branch1 = branch1;
I ran your test case, and it passes.
I sent a patch for that here:
https://lore.kernel.org/git/20230511215608.1297686-1-felipe.contreras@gmail.com/
This is a more proper fix because a) it doesn't add any new line of code, b) it
doesn't add a new include, and c) it doesn't call `git_config()` twice.
Cheers.
--
Felipe Contreras
next prev parent reply other threads:[~2023-05-11 22:08 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-10 19:07 [PATCH] merge-tree: load default git config Derrick Stolee via GitGitGadget
2023-05-10 19:18 ` Junio C Hamano
2023-05-10 19:26 ` Derrick Stolee
2023-05-10 23:21 ` Taylor Blau
2023-05-11 6:39 ` Elijah Newren
2023-05-10 20:30 ` Felipe Contreras
2023-05-11 15:09 ` Derrick Stolee
2023-05-11 17:02 ` Felipe Contreras
2023-05-11 22:07 ` Felipe Contreras [this message]
2023-05-10 22:32 ` Junio C Hamano
2023-05-10 23:27 ` Felipe Contreras
2023-05-11 17:15 ` Felipe Contreras
2023-05-11 6:34 ` Elijah Newren
2023-05-11 7:45 ` Felipe Contreras
2023-05-11 15:00 ` Derrick Stolee
2023-05-11 21:56 ` [PATCH] merge-tree: load config correctly Felipe Contreras
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=645d672447ebb_13d3fe294f@chronos.notmuch \
--to=felipe.contreras@gmail.com \
--cc=christian.couder@gmail.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=me@ttaylorr.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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.