]>
Commit | Line | Data |
---|---|---|
2a2ac926 JK |
1 | #!/bin/sh |
2 | ||
3 | test_description='merging with large rename matrix' | |
5902f5f4 | 4 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
334afbc7 JS |
5 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
6 | ||
2a2ac926 JK |
7 | . ./test-lib.sh |
8 | ||
9 | count() { | |
10 | i=1 | |
11 | while test $i -le $1; do | |
12 | echo $i | |
13 | i=$(($i + 1)) | |
14 | done | |
15 | } | |
16 | ||
17 | test_expect_success 'setup (initial)' ' | |
18 | touch file && | |
19 | git add . && | |
20 | git commit -m initial && | |
21 | git tag initial | |
22 | ' | |
23 | ||
24 | make_text() { | |
25 | echo $1: $2 | |
59f9c6c3 | 26 | for i in $(count 20); do |
2a2ac926 JK |
27 | echo $1: $i |
28 | done | |
29 | echo $1: $3 | |
30 | } | |
31 | ||
32 | test_rename() { | |
33 | test_expect_success "rename ($1, $2)" ' | |
a6a4a88a JK |
34 | n='$1' && |
35 | expect='$2' && | |
5902f5f4 | 36 | git checkout -f main && |
a6a4a88a | 37 | test_might_fail git branch -D test$n && |
2a2ac926 JK |
38 | git reset --hard initial && |
39 | for i in $(count $n); do | |
0c51d6b4 | 40 | make_text $i initial initial >$i || return 1 |
2a2ac926 JK |
41 | done && |
42 | git add . && | |
43 | git commit -m add=$n && | |
44 | for i in $(count $n); do | |
0c51d6b4 | 45 | make_text $i changed initial >$i || return 1 |
2a2ac926 JK |
46 | done && |
47 | git commit -a -m change=$n && | |
48 | git checkout -b test$n HEAD^ && | |
49 | for i in $(count $n); do | |
74d2f569 | 50 | git rm $i && |
0c51d6b4 | 51 | make_text $i initial changed >$i.moved || return 1 |
2a2ac926 JK |
52 | done && |
53 | git add . && | |
54 | git commit -m change+rename=$n && | |
55 | case "$expect" in | |
5902f5f4 JS |
56 | ok) git merge main ;; |
57 | *) test_must_fail git merge main ;; | |
2a2ac926 JK |
58 | esac |
59 | ' | |
60 | } | |
61 | ||
62 | test_rename 5 ok | |
63 | ||
64 | test_expect_success 'set diff.renamelimit to 4' ' | |
65 | git config diff.renamelimit 4 | |
66 | ' | |
67 | test_rename 4 ok | |
68 | test_rename 5 fail | |
69 | ||
70 | test_expect_success 'set merge.renamelimit to 5' ' | |
71 | git config merge.renamelimit 5 | |
72 | ' | |
73 | test_rename 5 ok | |
74 | test_rename 6 fail | |
75 | ||
df0b99f0 EN |
76 | test_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 | |
0c51d6b4 | 82 | make_text foo bar baz >$i || return 1 |
df0b99f0 EN |
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 | ||
100 | test_expect_success 'massive simple rename does not spam added files' ' | |
1f5ad6b1 | 101 | sane_unset GIT_MERGE_VERBOSITY && |
df0b99f0 | 102 | git merge --no-stat simple-rename | grep -v Removing >output && |
3fb0459b | 103 | test_line_count -lt 5 output |
df0b99f0 EN |
104 | ' |
105 | ||
2a2ac926 | 106 | test_done |