t3401: add another directory rename testcase for rebase and am

Similar to commit 16346883ab ("t3401: add directory rename testcases for rebase and am", 2018-06-27), add another testcase for directory rename detection. This new testcase differs in that it showcases a situation where no directory rename was performed, but which some backends incorrectly detect. As with the other testcase, run this in conjunction with each of the types of rebases: git-rebase--interactive git-rebase--am git-rebase--merge and also use the same testcase for git am --3way Reported-by: Nikolay Kasyanov <corrmage@gmail.com> Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Elijah Newren committed Aug 29, 2018 at 00:06 UTC e7588c96526293055727b27c4c51df86cfe06daf
1 file changed +109 -1
t/t3401-rebase-and-am-rename.sh
+109 -1
@@ -5,7 +5,7 @@ test_description='git rebase + directory rename tests'
5 . ./test-lib.sh
6 . "$TEST_DIRECTORY"/lib-rebase.sh
7
8 -test_expect_success 'setup testcase' '
8 +test_expect_success 'setup testcase where directory rename should be detected' '
9 test_create_repo dir-rename &&
10 (
11 cd dir-rename &&
@@ -102,4 +102,112 @@ test_expect_failure 'am: directory rename detected' '
102 )
103 '
104
105 +test_expect_success 'setup testcase where directory rename should NOT be detected' '
106 + test_create_repo no-dir-rename &&
107 + (
108 + cd no-dir-rename &&
109 +
110 + mkdir x &&
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" &&
117 +
118 + git branch O &&
119 + git branch A &&
120 + git branch B &&
121 +
122 + git checkout A &&
123 + echo v2 >project_info &&
124 + git add project_info &&
125 + git commit -m "Modify project_info" &&
126 +
127 + git checkout B &&
128 + mkdir y &&
129 + git mv x/c y/c &&
130 + echo v1 >project_info &&
131 + git add project_info &&
132 + git commit -m "Rename x/c to y/c, modify project_info"
133 + )
134 +'
135 +
136 +test_expect_success 'rebase --interactive: NO directory rename' '
137 + test_when_finished "git -C no-dir-rename rebase --abort" &&
138 + (
139 + cd no-dir-rename &&
140 +
141 + git checkout B^0 &&
142 +
143 + set_fake_editor &&
144 + test_must_fail env FAKE_LINES="1" git rebase --interactive A &&
145 +
146 + git ls-files -s >out &&
147 + test_line_count = 6 out &&
148 +
149 + test_path_is_file x/a &&
150 + test_path_is_file x/b &&
151 + test_path_is_missing x/c
152 + )
153 +'
154 +
155 +test_expect_failure 'rebase (am): NO directory rename' '
156 + test_when_finished "git -C no-dir-rename rebase --abort" &&
157 + (
158 + cd no-dir-rename &&
159 +
160 + git checkout B^0 &&
161 +
162 + set_fake_editor &&
163 + test_must_fail git rebase A &&
164 +
165 + git ls-files -s >out &&
166 + test_line_count = 6 out &&
167 +
168 + test_path_is_file x/a &&
169 + test_path_is_file x/b &&
170 + test_path_is_missing x/c
171 + )
172 +'
173 +
174 +test_expect_success 'rebase --merge: NO directory rename' '
175 + test_when_finished "git -C no-dir-rename rebase --abort" &&
176 + (
177 + cd no-dir-rename &&
178 +
179 + git checkout B^0 &&
180 +
181 + set_fake_editor &&
182 + test_must_fail git rebase --merge A &&
183 +
184 + git ls-files -s >out &&
185 + test_line_count = 6 out &&
186 +
187 + test_path_is_file x/a &&
188 + test_path_is_file x/b &&
189 + test_path_is_missing x/c
190 + )
191 +'
192 +
193 +test_expect_failure 'am: NO directory rename' '
194 + test_when_finished "git -C no-dir-rename am --abort" &&
195 + (
196 + cd no-dir-rename &&
197 +
198 + git checkout A^0 &&
199 +
200 + git format-patch -1 B &&
201 +
202 + test_must_fail git am --3way 0001*.patch &&
203 +
204 + git ls-files -s >out &&
205 + test_line_count = 6 out &&
206 +
207 + test_path_is_file x/a &&
208 + test_path_is_file x/b &&
209 + test_path_is_missing x/c
210 + )
211 +'
212 +
213 test_done