Merge branch 'dl/complete-rebase-onto'
[git] / t / t4130-apply-criss-cross-rename.sh
1 #!/bin/sh
2
3 test_description='git apply handling criss-cross rename patch.'
4 . ./test-lib.sh
5
6 create_file() {
7         cnt=0
8         while test $cnt -le 100
9         do
10                 cnt=$(($cnt + 1))
11                 echo "$2" >> "$1"
12         done
13 }
14
15 test_expect_success 'setup' '
16         # Ensure that file sizes are different, because on Windows
17         # lstat() does not discover inode numbers, and we need
18         # other properties to discover swapped files
19         # (mtime is not always different, either).
20         create_file file1 "some content" &&
21         create_file file2 "some other content" &&
22         create_file file3 "again something else" &&
23         git add file1 file2 file3 &&
24         git commit -m 1
25 '
26
27 test_expect_success 'criss-cross rename' '
28         mv file1 tmp &&
29         mv file2 file1 &&
30         mv tmp file2 &&
31         cp file1 file1-swapped &&
32         cp file2 file2-swapped
33 '
34
35 test_expect_success 'diff -M -B' '
36         git diff -M -B > diff &&
37         git reset --hard
38
39 '
40
41 test_expect_success 'apply' '
42         git apply diff &&
43         test_cmp file1 file1-swapped &&
44         test_cmp file2 file2-swapped
45 '
46
47 test_expect_success 'criss-cross rename' '
48         git reset --hard &&
49         mv file1 tmp &&
50         mv file2 file1 &&
51         mv file3 file2 &&
52         mv tmp file3 &&
53         cp file1 file1-swapped &&
54         cp file2 file2-swapped &&
55         cp file3 file3-swapped
56 '
57
58 test_expect_success 'diff -M -B' '
59         git diff -M -B > diff &&
60         git reset --hard
61 '
62
63 test_expect_success 'apply' '
64         git apply diff &&
65         test_cmp file1 file1-swapped &&
66         test_cmp file2 file2-swapped &&
67         test_cmp file3 file3-swapped
68 '
69
70 test_done