1#!/bin/sh 2 3test_description='merging with large rename matrix' 4GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 5export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 6 7. ./test-lib.sh 8 9count() { 10 i=1 11 while test $i -le $1; do 12 echo $i 13 i=$(($i + 1)) 14 done 15} 16 17test_expect_success 'setup (initial)' ' 18 touch file && 19 git add . && 20 git commit -m initial && 21 git tag initial 22' 23 24make_text() { 25 echo $1: $2 26 for i in $(count 20); do 27 echo $1: $i 28 done 29 echo $1: $3 30} 31 32test_rename() { 33 test_expect_success "rename ($1, $2)" ' 34 n='$1' && 35 expect='$2' && 36 git checkout -f main && 37 test_might_fail git branch -D test$n && 38 git reset --hard initial && 39 for i in $(count $n); do 40 make_text $i initial initial >$i 41 done && 42 git add . && 43 git commit -m add=$n && 44 for i in $(count $n); do 45 make_text $i changed initial >$i 46 done && 47 git commit -a -m change=$n && 48 git checkout -b test$n HEAD^ && 49 for i in $(count $n); do 50 git rm $i 51 make_text $i initial changed >$i.moved 52 done && 53 git add . && 54 git commit -m change+rename=$n && 55 case "$expect" in 56 ok) git merge main ;; 57 *) test_must_fail git merge main ;; 58 esac 59 ' 60} 61 62test_rename 5 ok 63 64test_expect_success 'set diff.renamelimit to 4' ' 65 git config diff.renamelimit 4 66' 67test_rename 4 ok 68test_rename 5 fail 69 70test_expect_success 'set merge.renamelimit to 5' ' 71 git config merge.renamelimit 5 72' 73test_rename 5 ok 74test_rename 6 fail 75 76test_expect_success 'setup large simple rename' ' 77 git config --unset merge.renamelimit && 78 git config --unset diff.renamelimit && 79 80 git reset --hard initial && 81 for i in $(count 200); do 82 make_text foo bar baz >$i 83 done && 84 git add . && 85 git commit -m create-files && 86 87 git branch simple-change && 88 git checkout -b simple-rename && 89 90 mkdir builtin && 91 git mv [0-9]* builtin/ && 92 git commit -m renamed && 93 94 git checkout simple-change && 95 >unrelated-change && 96 git add unrelated-change && 97 git commit -m unrelated-change 98' 99 100test_expect_success 'massive simple rename does not spam added files' ' 101 sane_unset GIT_MERGE_VERBOSITY && 102 git merge --no-stat simple-rename | grep -v Removing >output && 103 test_line_count -lt 5 output 104' 105 106test_done 107