summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2023-05-15 13:59:06 -0700
committerJunio C Hamano <gitster@pobox.com>2023-05-15 13:59:06 -0700
commit80754c5cc05955dd0159fa40d7b82b2802a4deba (patch)
tree68197d59a89c0d32ad358c17a97cffe1ccb6ea71
parentdb13ea835b056afa13ab96c9f96dce011ecc328a (diff)
parentb6551feadfda76379a28f424ea46998e2b995d07 (diff)
downloadgit-80754c5cc05955dd0159fa40d7b82b2802a4deba.tar.gz
Merge branch 'ds/merge-tree-use-config'
Allow git forges to disable replace-refs feature while running "git merge-tree". * ds/merge-tree-use-config: merge-tree: load default git config
-rw-r--r--builtin/merge-tree.c3
-rwxr-xr-xt/t4300-merge-tree.sh18
2 files changed, 21 insertions, 0 deletions
diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
index aa8040c2a6..b8f8a8b5d9 100644
--- a/builtin/merge-tree.c
+++ b/builtin/merge-tree.c
@@ -17,6 +17,7 @@
#include "merge-blobs.h"
#include "quote.h"
#include "tree.h"
+#include "config.h"
static int line_termination = '\n';
@@ -628,6 +629,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