#!/bin/sh # # Copyright (c) 2006 Junio C Hamano # test_description='Binary diff and apply ' . ./test-lib.sh test_expect_success 'prepare repository' \ 'echo AIT >a && echo BIT >b && echo CIT >c && echo DIT >d && git update-index --add a b c d && echo git >a && cat "$TEST_DIRECTORY"/test-binary-1.png >b && echo git >c && cat b b >d' cat > expected <<\EOF a | 2 +- b | Bin c | 2 +- d | Bin 4 files changed, 2 insertions(+), 2 deletions(-) EOF test_expect_success 'diff without --binary' \ 'git diff | git apply --stat --summary >current && test_cmp expected current' test_expect_success 'diff with --binary' \ 'git diff --binary | git apply --stat --summary >current && test_cmp expected current' # apply needs to be able to skip the binary material correctly # in order to report the line number of a corrupt patch. test_expect_success 'apply detecting corrupt patch correctly' \ 'git diff | sed -e 's/-CIT/xCIT/' >broken && if git apply --stat --summary broken 2>detected then echo unhappy - should have detected an error (exit 1) else echo happy fi && detected=`cat detected` && detected=`expr "$detected" : "fatal.*at line \\([0-9]*\\)\$"` && detected=`sed -ne "${detected}p" broken` && test "$detected" = xCIT' test_expect_success 'apply detecting corrupt patch correctly' \ 'git diff --binary | sed -e 's/-CIT/xCIT/' >broken && if git apply --stat --summary broken 2>detected then echo unhappy - should have detected an error (exit 1) else echo happy fi && detected=`cat detected` && detected=`expr "$detected" : "fatal.*at line \\([0-9]*\\)\$"` && detected=`sed -ne "${detected}p" broken` && test "$detected" = xCIT' test_expect_success 'initial commit' 'git commit -a -m initial' # Try removal (b), modification (d), and creation (e). test_expect_success 'diff-index with --binary' \ 'echo AIT >a && mv b e && echo CIT >c && cat e >d && git update-index --add --remove a b c d e && tree0=`git write-tree` && git diff --cached --binary >current && git apply --stat --summary current' test_expect_success 'apply binary patch' \ 'git reset --hard && git apply --binary --index <current && tree1=`git write-tree` && test "$tree1" = "$tree0"' test_expect_success 'diff --no-index with binary creation' ' echo Q | q_to_nul >binary && (: hide error code from diff, which just indicates differences git diff --binary --no-index /dev/null binary >current || true ) && rm binary && git apply --binary <current && echo Q >expected && nul_to_q <binary >actual && test_cmp expected actual ' test_done