aboutsummaryrefslogtreecommitdiffstats
path: root/t/t4301-merge-tree-write-tree.sh
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2025-05-16 20:04:18 +0000
committerJunio C Hamano <gitster@pobox.com>2025-05-16 15:09:14 -0700
commit29d7bf19512d8ca97be5cf708ca2e0bcc29408ab (patch)
treeba758870c3acb07b796a8205d6e7ad459e38f288 /t/t4301-merge-tree-write-tree.sh
parentmerge-ort: add a new mergeability_only option (diff)
downloadgit-29d7bf19512d8ca97be5cf708ca2e0bcc29408ab.tar.gz
git-29d7bf19512d8ca97be5cf708ca2e0bcc29408ab.zip
merge-tree: add a new --quiet flag
Git Forges may be interested in whether two branches can be merged while not being interested in what the resulting merge tree is nor which files conflicted. For such cases, add a new --quiet flag which will make use of the new mergeability_only flag added to merge-ort in the previous commit. This option allows the merge machinery to, in the outer layer of the merge: * exit early when a conflict is detected * avoid writing (most) merged blobs/trees to the object store Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t4301-merge-tree-write-tree.sh')
-rwxr-xr-xt/t4301-merge-tree-write-tree.sh38
1 files changed, 38 insertions, 0 deletions
diff --git a/t/t4301-merge-tree-write-tree.sh b/t/t4301-merge-tree-write-tree.sh
index f9c5883a7f..6e117ee93c 100755
--- a/t/t4301-merge-tree-write-tree.sh
+++ b/t/t4301-merge-tree-write-tree.sh
@@ -54,6 +54,25 @@ test_expect_success setup '
git commit -m first-commit
'
+test_expect_success '--quiet on clean merge' '
+ # Get rid of loose objects to start with
+ git gc &&
+ echo "0 objects, 0 kilobytes" >expect &&
+ git count-objects >actual &&
+ test_cmp expect actual &&
+
+ # Ensure merge is successful (exit code of 0)
+ git merge-tree --write-tree --quiet side1 side3 >output &&
+
+ # Ensure there is no output
+ test_must_be_empty output &&
+
+ # Ensure no loose objects written (all new objects written would have
+ # been in "outer layer" of the merge)
+ git count-objects >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'Clean merge' '
TREE_OID=$(git merge-tree --write-tree side1 side3) &&
q_to_tab <<-EOF >expect &&
@@ -72,6 +91,25 @@ test_expect_success 'Failed merge without rename detection' '
grep "CONFLICT (modify/delete): numbers deleted" out
'
+test_expect_success '--quiet on conflicted merge' '
+ # Get rid of loose objects to start with
+ git gc &&
+ echo "0 objects, 0 kilobytes" >expect &&
+ git count-objects >actual &&
+ test_cmp expect actual &&
+
+ # Ensure merge has conflict
+ test_expect_code 1 git merge-tree --write-tree --quiet side1 side2 >output &&
+
+ # Ensure there is no output
+ test_must_be_empty output &&
+
+ # Ensure no loose objects written (all new objects written would have
+ # been in "outer layer" of the merge)
+ git count-objects >actual &&
+ test_cmp expect actual
+'
+
test_expect_success 'Content merge and a few conflicts' '
git checkout side1^0 &&
test_must_fail git merge side2 &&