diff options
-rw-r--r-- | builtin/merge-tree.c | 3 | ||||
-rwxr-xr-x | t/t4300-merge-tree.sh | 18 |
2 files changed, 21 insertions, 0 deletions
diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c index 828dc81c42..d401e74698 100644 --- a/builtin/merge-tree.c +++ b/builtin/merge-tree.c @@ -13,6 +13,7 @@ #include "exec-cmd.h" #include "merge-blobs.h" #include "quote.h" +#include "config.h" static int line_termination = '\n'; @@ -620,6 +621,8 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix) if (argc != expected_remaining_argc) usage_with_options(merge_tree_usage, mt_options); + git_config(git_default_config, NULL); + /* Do the relevant type of merge */ if (o.mode == MODE_REAL) return real_merge(&o, merge_base, argv[0], argv[1], prefix); diff --git a/t/t4300-merge-tree.sh b/t/t4300-merge-tree.sh index c52c8a21fa..57c4f26e46 100755 --- a/t/t4300-merge-tree.sh +++ b/t/t4300-merge-tree.sh @@ -334,4 +334,22 @@ test_expect_success 'turn tree to file' ' test_cmp expect actual ' +test_expect_success 'merge-tree respects core.useReplaceRefs=false' ' + test_commit merge-to && + test_commit valid base && + git reset --hard HEAD^ && + test_commit malicious base && + + test_when_finished "git replace -d $(git rev-parse valid^0)" && + git replace valid^0 malicious^0 && + + tree=$(git -c core.useReplaceRefs=true merge-tree --write-tree merge-to valid) && + merged=$(git cat-file -p $tree:base) && + test malicious = $merged && + + tree=$(git -c core.useReplaceRefs=false merge-tree --write-tree merge-to valid) && + merged=$(git cat-file -p $tree:base) && + test valid = $merged +' + test_done |