3 test_description
='git rebase + directory rename tests'
6 .
"$TEST_DIRECTORY"/lib-rebase.sh
8 test_expect_success
'setup testcase where directory rename should be detected' '
9 test_create_repo dir-rename &&
15 test_seq 11 20 >x/b &&
16 test_seq 21 30 >x/c &&
17 test_write_lines a b c d e f g h i >l &&
19 git commit -m "Initial" &&
28 git commit -m "Rename x to y, l to letters" &&
32 test_seq 31 40 >x/d &&
34 git commit -m "Modify l, add x/d"
38 test_expect_success
'rebase --interactive: directory rename detected' '
45 FAKE_LINES="1" git -c merge.directoryRenames=true rebase --interactive A &&
47 git ls-files -s >out &&
48 test_line_count = 5 out &&
50 test_path_is_file y/d &&
51 test_path_is_missing x/d
55 test_expect_failure
'rebase (am): directory rename detected' '
61 git -c merge.directoryRenames=true rebase A &&
63 git ls-files -s >out &&
64 test_line_count = 5 out &&
66 test_path_is_file y/d &&
67 test_path_is_missing x/d
71 test_expect_success
'rebase --merge: directory rename detected' '
77 git -c merge.directoryRenames=true rebase --merge A &&
79 git ls-files -s >out &&
80 test_line_count = 5 out &&
82 test_path_is_file y/d &&
83 test_path_is_missing x/d
87 test_expect_failure
'am: directory rename detected' '
93 git format-patch -1 B &&
95 git -c merge.directoryRenames=true am --3way 0001*.patch &&
97 git ls-files -s >out &&
98 test_line_count = 5 out &&
100 test_path_is_file y/d &&
101 test_path_is_missing x/d
105 test_expect_success
'setup testcase where directory rename should NOT be detected' '
106 test_create_repo no-dir-rename &&
111 test_seq 1 10 >x/a &&
112 test_seq 11 20 >x/b &&
113 test_seq 21 30 >x/c &&
114 echo original >project_info &&
115 git add x project_info &&
116 git commit -m "Initial" &&
123 echo v2 >project_info &&
124 git add project_info &&
125 git commit -m "Modify project_info" &&
130 echo v1 >project_info &&
131 git add project_info &&
132 git commit -m "Rename x/c to y/c, modify project_info"
136 test_expect_success
'rebase --interactive: NO directory rename' '
137 test_when_finished "git -C no-dir-rename rebase --abort" &&
144 test_must_fail env FAKE_LINES="1" git rebase --interactive A &&
146 git ls-files -s >out &&
147 test_line_count = 6 out &&
149 test_path_is_file x/a &&
150 test_path_is_file x/b &&
151 test_path_is_missing x/c
155 test_expect_success
'rebase (am): NO directory rename' '
156 test_when_finished "git -C no-dir-rename rebase --abort" &&
163 test_must_fail git rebase A &&
165 git ls-files -s >out &&
166 test_line_count = 6 out &&
168 test_path_is_file x/a &&
169 test_path_is_file x/b &&
170 test_path_is_missing x/c
174 test_expect_success
'rebase --merge: NO directory rename' '
175 test_when_finished "git -C no-dir-rename rebase --abort" &&
182 test_must_fail git rebase --merge A &&
184 git ls-files -s >out &&
185 test_line_count = 6 out &&
187 test_path_is_file x/a &&
188 test_path_is_file x/b &&
189 test_path_is_missing x/c
193 test_expect_success
'am: NO directory rename' '
194 test_when_finished "git -C no-dir-rename am --abort" &&
200 git format-patch -1 B &&
202 test_must_fail git am --3way 0001*.patch &&
204 git ls-files -s >out &&
205 test_line_count = 6 out &&
207 test_path_is_file x/a &&
208 test_path_is_file x/b &&
209 test_path_is_missing x/c