1#!/bin/sh
2
3test_description='git apply handling criss-cross rename patch.'
4. ./test-lib.sh
5
6create_file() {
7	cnt=0
8	while test $cnt -le 100
9	do
10		cnt=$(($cnt + 1))
11		echo "$2" >> "$1"
12	done
13}
14
15test_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
27test_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
35test_expect_success 'diff -M -B' '
36	git diff -M -B > diff &&
37	git reset --hard
38
39'
40
41test_expect_success 'apply' '
42	git apply diff &&
43	test_cmp file1 file1-swapped &&
44	test_cmp file2 file2-swapped
45'
46
47test_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
58test_expect_success 'diff -M -B' '
59	git diff -M -B > diff &&
60	git reset --hard
61'
62
63test_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
70test_done
71