#!/bin/sh setglobal test_description = ''merging with large rename matrix'' source ./test-lib.sh proc count { setglobal i = '1' while test $i -le $1 { echo $i setglobal i = $shExpr('$i + 1') } } test_expect_success 'setup (initial)' ' touch file && git add . && git commit -m initial && git tag initial ' proc make_text { echo $1: $2 for i in [$[count 20]] { echo $1: $i } echo $1: $3 } proc test_rename { test_expect_success "rename ($1, $2)" ' n='$1' && expect='$2' && git checkout -f master && test_might_fail git branch -D test$n && git reset --hard initial && for i in $(count $n); do make_text $i initial initial >$i done && git add . && git commit -m add=$n && for i in $(count $n); do make_text $i changed initial >$i 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 done && git add . && git commit -m change+rename=$n && case "$expect" in ok) git merge master ;; *) test_must_fail git merge master ;; 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 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