17
echo "after folder1" >g &&
18
echo "after x" >z &&
19
mkdir folder1 folder2 deep x &&
20
- mkdir deep/deeper1 deep/deeper2 &&
20
+ mkdir deep/deeper1 deep/deeper2 deep/before deep/later &&
21
mkdir deep/deeper1/deepest &&
22
echo "after deeper1" >deep/e &&
23
echo "after deepest" >deep/deeper1/e &&
25
cp a folder2 &&
26
cp a x &&
27
cp a deep &&
28
+ cp a deep/before &&
29
cp a deep/deeper1 &&
30
cp a deep/deeper2 &&
31
+ cp a deep/later &&
32
cp a deep/deeper1/deepest &&
33
cp -r deep/deeper1/deepest deep/deeper2 &&
34
+ mkdir deep/deeper1/0 &&
35
+ mkdir deep/deeper1/0/0 &&
36
+ touch deep/deeper1/0/1 &&
37
+ touch deep/deeper1/0/0/0 &&
38
+ >folder1- &&
39
+ >folder1.x &&
40
+ >folder10 &&
41
+ cp -r deep/deeper1/0 folder1 &&
42
+ cp -r deep/deeper1/0 folder2 &&
43
+ echo >>folder1/0/0/0 &&
44
+ echo >>folder2/0/1 &&
45
git add . &&
46
git commit -m "initial commit" &&
47
git checkout -b base &&
69
mv folder1/a folder2/b &&
70
mv folder1/larger-content folder2/edited-content &&
71
echo >>folder2/edited-content &&
72
+ echo >>folder2/0/1 &&
73
+ echo stuff >>deep/deeper1/a &&
74
git add . &&
75
git commit -m "rename folder1/... to folder2/..." &&
76
77
git checkout -b rename-out-to-in rename-base &&
78
mv folder1/a deep/deeper1/b &&
79
+ echo more stuff >>deep/deeper1/a &&
80
+ rm folder2/0/1 &&
81
+ mkdir folder2/0/1 &&
82
+ echo >>folder2/0/1/1 &&
83
mv folder1/larger-content deep/deeper1/edited-content &&
84
echo >>deep/deeper1/edited-content &&
85
git add . &&
87
88
git checkout -b rename-in-to-out rename-base &&
89
mv deep/deeper1/a folder1/b &&
90
+ echo >>folder2/0/1 &&
91
+ rm -rf folder1/0/0 &&
92
+ echo >>folder1/0/0 &&
93
mv deep/deeper1/larger-content folder1/edited-content &&
94
echo >>folder1/edited-content &&
95
git add . &&
284
test_all_match git diff --staged
285
'
286
265
-test_expect_success 'diff with renames' '
287
+test_expect_success 'diff with renames and conflicts' '
288
init_repos &&
289
290
for branch in rename-out-to-out rename-out-to-in rename-in-to-out
291
do
292
test_all_match git checkout rename-base &&
271
- test_all_match git checkout $branch -- .&&
293
+ test_all_match git checkout $branch -- . &&
294
+ test_all_match git status --porcelain=v2 &&
295
+ test_all_match git diff --staged --no-renames &&
296
+ test_all_match git diff --staged --find-renames || return 1
297
+ done
298
+'
299
+
300
+test_expect_success 'diff with directory/file conflicts' '
301
+ init_repos &&
302
+
303
+ for branch in rename-out-to-out rename-out-to-in rename-in-to-out
304
+ do
305
+ git -C full-checkout reset --hard &&
306
+ test_sparse_match git reset --hard &&
307
+ test_all_match git checkout $branch &&
308
+ test_all_match git checkout rename-base -- . &&
309
+ test_all_match git status --porcelain=v2 &&
310
test_all_match git diff --staged --no-renames &&
311
test_all_match git diff --staged --find-renames || return 1
312
done