summaryrefslogtreecommitdiff
path: root/t/t6412-merge-large-rename.sh
diff options
context:
space:
mode:
Diffstat (limited to 't/t6412-merge-large-rename.sh')
-rwxr-xr-xt/t6412-merge-large-rename.sh106
1 files changed, 106 insertions, 0 deletions
diff --git a/t/t6412-merge-large-rename.sh b/t/t6412-merge-large-rename.sh
new file mode 100755
index 0000000..ca018d1
--- /dev/null
+++ b/t/t6412-merge-large-rename.sh
@@ -0,0 +1,106 @@
+#!/bin/sh
+
+test_description='merging with large rename matrix'
+GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
+export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
+
+. ./test-lib.sh
+
+count() {
+ i=1
+ while test $i -le $1; do
+ echo $i
+ i=$(($i + 1))
+ done
+}
+
+test_expect_success 'setup (initial)' '
+ touch file &&
+ git add . &&
+ git commit -m initial &&
+ git tag initial
+'
+
+make_text() {
+ echo $1: $2
+ for i in $(count 20); do
+ echo $1: $i
+ done
+ echo $1: $3
+}
+
+test_rename() {
+ test_expect_success "rename ($1, $2)" '
+ n='$1' &&
+ expect='$2' &&
+ git checkout -f main &&
+ test_might_fail git branch -D test$n &&
+ git reset --hard initial &&
+ for i in $(count $n); do
+ make_text $i initial initial >$i || return 1
+ done &&
+ git add . &&
+ git commit -m add=$n &&
+ for i in $(count $n); do
+ make_text $i changed initial >$i || return 1
+ done &&
+ git commit -a -m change=$n &&
+ git checkout -b test$n HEAD^ &&
+ for i in $(count $n); do
+ git rm $i &&
+ make_text $i initial changed >$i.moved || return 1
+ done &&
+ git add . &&
+ git commit -m change+rename=$n &&
+ case "$expect" in
+ ok) git merge main ;;
+ *) test_must_fail git merge main ;;
+ esac
+ '
+}
+
+test_rename 5 ok
+
+test_expect_success 'set diff.renamelimit to 4' '
+ git config diff.renamelimit 4
+'
+test_rename 4 ok
+test_rename 5 fail
+
+test_expect_success 'set merge.renamelimit to 5' '
+ git config merge.renamelimit 5
+'
+test_rename 5 ok
+test_rename 6 fail
+
+test_expect_success 'setup large simple rename' '
+ git config --unset merge.renamelimit &&
+ git config --unset diff.renamelimit &&
+
+ git reset --hard initial &&
+ for i in $(count 200); do
+ make_text foo bar baz >$i || return 1
+ done &&
+ git add . &&
+ git commit -m create-files &&
+
+ git branch simple-change &&
+ git checkout -b simple-rename &&
+
+ mkdir builtin &&
+ git mv [0-9]* builtin/ &&
+ git commit -m renamed &&
+
+ git checkout simple-change &&
+ >unrelated-change &&
+ git add unrelated-change &&
+ git commit -m unrelated-change
+'
+
+test_expect_success 'massive simple rename does not spam added files' '
+ sane_unset GIT_MERGE_VERBOSITY &&
+ git merge --no-stat simple-rename | grep -v Removing >output &&
+ test_line_count -lt 5 output
+'
+
+test_done