#!/bin/sh setvar test_description = ''git apply handling criss-cross rename patch.'' source ./test-lib.sh proc create_file { setvar cnt = '0' while test $cnt -le 100 { setvar cnt = $(($cnt + 1)) echo $2 >> "$1" } } 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