Derrick Stolee wrote: > On 5/10/2023 4:30 PM, Felipe Contreras wrote: > > Derrick Stolee via GitGitGadget wrote: > >> From: Derrick Stolee <derrickstolee@xxxxxxxxxx> > >> > >> 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: > > test_expect_success 'merge-tree respects merge.conflictstyle' ' > test_commit conflict-base && > for branch in left right > do > git checkout -b $branch conflict-base && > echo $branch >>conflict-base.t && > git add conflict-base.t && > git commit -m $branch || return 1 > done && > > test_must_fail git merge-tree left right >out1 && > test_must_fail git -c merge.conflictstyle=diff3 merge-tree left right >out2 && > > tree1=$(head -n 1 out1) && > tree2=$(head -n 1 out2) && > > git cat-file -p $tree1:conflict-base.t >conflict1 && > git cat-file -p $tree2:conflict-base.t >conflict2 && > ! test_cmp conflict1 conflict2 && > ! grep "||||||" conflict1 && > grep "||||||" conflict2 > ' This test is doing a real merge, not a trivial merge. Try doing a trivial merge instead--which is what most of our testing framework checks--and your test fails: @@ -14,17 +14,12 @@ test_expect_success 'merge-tree respects merge.conflictstyle' ' git commit -m $branch || return 1 done && - test_must_fail git merge-tree left right >out1 && - test_must_fail git -c merge.conflictstyle=diff3 merge-tree left right >out2 && + test_expect_code 0 git merge-tree conflict-base left right >out1 && + test_expect_code 0 git -c merge.conflictstyle=diff3 merge-tree conflict-base left right >out2 && - tree1=$(head -n 1 out1) && - tree2=$(head -n 1 out2) && - - git cat-file -p $tree1:conflict-base.t >conflict1 && - git cat-file -p $tree2:conflict-base.t >conflict2 && - ! test_cmp conflict1 conflict2 && - ! grep "||||||" conflict1 && - grep "||||||" conflict2 + ! test_cmp out1 out2 && + ! grep "||||||" out1 && + grep "||||||" out2 ' -- Felipe Contreras