#!/bin/sh test_description='git apply handling criss-cross rename patch.' . ./test-lib.sh create_file() { cnt=0 while test $cnt -le 100 do cnt=$(($cnt + 1)) echo "$2" >> "$1" done } test_expect_success 'setup' ' # Ensure that file sizes are different, because on Windows # lstat() does not discover inode numbers, and we need # other properties to discover swapped files # (mtime is not always different, either). create_file file1 "some content" && create_file file2 "some other content" && create_file file3 "again something else" && git add file1 file2 file3 && git commit -m 1 ' test_expect_success 'criss-cross rename' ' mv file1 tmp && mv file2 file1 && mv tmp file2 && cp file1 file1-swapped && cp file2 file2-swapped ' test_expect_success 'diff -M -B' ' git diff -M -B > diff && git reset --hard ' test_expect_success 'apply' ' git apply diff && test_cmp file1 file1-swapped && test_cmp file2 file2-swapped ' test_expect_success 'criss-cross rename' ' git reset --hard && mv file1 tmp && mv file2 file1 && mv file3 file2 && mv tmp file3 && cp file1 file1-swapped && cp file2 file2-swapped && cp file3 file3-swapped ' test_expect_success 'diff -M -B' ' git diff -M -B > diff && git reset --hard ' test_expect_success 'apply' ' git apply diff && test_cmp file1 file1-swapped && test_cmp file2 file2-swapped && test_cmp file3 file3-swapped ' test_done