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