#!/bin/sh test_description='merging with large rename matrix' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master 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 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