mirror of
https://github.com/git/git
synced 2024-11-05 04:53:18 +00:00
12dfc2475c
When merging file pairs after they have been broken up we queue a new file pair and discard the broken-up ones. The newly-queued file pair reuses one filespec of the broken up pairs each, where the respective other filespec gets discarded. But we only end up freeing the filespec's data, not the filespec itself, and thus leak memory. Fix these leaks by using `free_filespec()` instead. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
81 lines
1.7 KiB
Bash
Executable file
81 lines
1.7 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='rewrite diff on binary file'
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
|
|
# We must be large enough to meet the MINIMUM_BREAK_SIZE
|
|
# requirement.
|
|
make_file() {
|
|
# common first line to help identify rewrite versus regular diff
|
|
printf "=\n" >file
|
|
for i in 1 2 3 4 5 6 7 8 9 10
|
|
do
|
|
for j in 1 2 3 4 5 6 7 8 9
|
|
do
|
|
for k in 1 2 3 4 5
|
|
do
|
|
printf "$1\n"
|
|
done
|
|
done
|
|
done >>file
|
|
}
|
|
|
|
test_expect_success 'create binary file with changes' '
|
|
make_file "\\0" &&
|
|
git add file &&
|
|
make_file "\\01"
|
|
'
|
|
|
|
test_expect_success 'vanilla diff is binary' '
|
|
git diff >diff &&
|
|
grep "Binary files a/file and b/file differ" diff
|
|
'
|
|
|
|
test_expect_success 'rewrite diff is binary' '
|
|
git diff -B >diff &&
|
|
grep "dissimilarity index" diff &&
|
|
grep "Binary files a/file and b/file differ" diff
|
|
'
|
|
|
|
test_expect_success 'rewrite diff can show binary patch' '
|
|
git diff -B --binary >diff &&
|
|
grep "dissimilarity index" diff &&
|
|
grep "GIT binary patch" diff
|
|
'
|
|
|
|
test_expect_success 'rewrite diff --numstat shows binary changes' '
|
|
git diff -B --numstat --summary >diff &&
|
|
grep -e "- - " diff &&
|
|
grep " rewrite file" diff
|
|
'
|
|
|
|
test_expect_success 'diff --stat counts binary rewrite as 0 lines' '
|
|
git diff -B --stat --summary >diff &&
|
|
grep "Bin" diff &&
|
|
test_grep "0 insertions.*0 deletions" diff &&
|
|
grep " rewrite file" diff
|
|
'
|
|
|
|
{
|
|
echo "#!$SHELL_PATH"
|
|
cat <<'EOF'
|
|
"$PERL_PATH" -e '$/ = undef; $_ = <>; s/./ord($&)/ge; print $_' < "$1"
|
|
EOF
|
|
} >dump
|
|
chmod +x dump
|
|
|
|
test_expect_success 'setup textconv' '
|
|
echo file diff=foo >.gitattributes &&
|
|
git config diff.foo.textconv "\"$(pwd)\""/dump
|
|
'
|
|
|
|
test_expect_success 'rewrite diff respects textconv' '
|
|
git diff -B >diff &&
|
|
grep "dissimilarity index" diff &&
|
|
grep "^-61" diff &&
|
|
grep "^-0" diff
|
|
'
|
|
|
|
test_done
|