From c8bae7493d2f2910b57f13ded012e86bdcfb0532 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 16:47:53 +0200 Subject: Adding upstream version 1:2.39.2. Signed-off-by: Daniel Baumann --- t/t4012-diff-binary.sh | 134 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100755 t/t4012-diff-binary.sh (limited to 't/t4012-diff-binary.sh') diff --git a/t/t4012-diff-binary.sh b/t/t4012-diff-binary.sh new file mode 100755 index 0000000..c64d9d2 --- /dev/null +++ b/t/t4012-diff-binary.sh @@ -0,0 +1,134 @@ +#!/bin/sh +# +# Copyright (c) 2006 Junio C Hamano +# + +test_description='Binary diff and apply +' + +TEST_PASSES_SANITIZE_LEAK=true +. ./test-lib.sh + +cat >expect.binary-numstat <<\EOF +1 1 a +- - b +1 1 c +- - d +EOF + +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 'apply --stat output for binary file change' ' + git diff >diff && + git apply --stat --summary current && + test_cmp expected current +' + +test_expect_success 'diff --shortstat output for binary file change' ' + tail -n 1 expected >expect && + git diff --shortstat >current && + test_cmp expect current +' + +test_expect_success 'diff --shortstat output for binary file change only' ' + echo " 1 file changed, 0 insertions(+), 0 deletions(-)" >expected && + git diff --shortstat -- b >current && + test_cmp expected current +' + +test_expect_success 'apply --numstat notices binary file change' ' + git diff >diff && + git apply --numstat current && + test_cmp expect.binary-numstat current +' + +test_expect_success 'apply --numstat understands diff --binary format' ' + git diff --binary >diff && + git apply --numstat current && + test_cmp expect.binary-numstat 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 >output && + sed -e "s/-CIT/xCIT/" broken && + test_must_fail git apply --stat --summary broken 2>detected && + detected=$(cat detected) && + detected=$(expr "$detected" : "error.*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 && + test_must_fail git apply --stat --summary broken 2>detected && + detected=$(cat detected) && + detected=$(expr "$detected" : "error.*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 binary && + # hide error code from diff, which just indicates differences + test_might_fail git diff --binary --no-index /dev/null binary >current && + rm binary && + git apply --binary expected && + nul_to_q actual && + test_cmp expected actual +' + +cat >expect < 1026 bytes + tëxtfilë | 10000 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +EOF + +test_expect_success 'diff --stat with binary files and big change count' ' + printf "\01\00%1024d" 1 >binfilë && + git add binfilë && + i=0 && + while test $i -lt 10000; do + echo $i && + i=$(($i + 1)) || return 1 + done >tëxtfilë && + git add tëxtfilë && + git -c core.quotepath=false diff --cached --stat binfilë tëxtfilë >output && + grep " | " output >actual && + test_cmp expect actual +' + +test_done -- cgit v1.2.3