t5000, t5003: do not use test_cmp to compare binary files

test_cmp() is primarily meant to compare text files (and display the
difference for debug purposes).

Raw "cmp" is better suited to compare binary files (tar, zip, etc.).

On MinGW, test_cmp is a shell function mingw_test_cmp that tries to
read both files into environment, stripping CR characters (introduced
in commit 4d715ac0).

This function usually speeds things up, as fork is extremly slow on
Windows.  But no wonder that this function is extremely slow and
sometimes even crashes when comparing large tar or zip files.

Signed-off-by: Stepan Kasal <kasal@ucw.cz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stepan Kasal 2014-06-04 17:57:52 +02:00 committed by Junio C Hamano
parent e156455ea4
commit b93e6e3663
5 changed files with 28 additions and 22 deletions

View file

@ -164,7 +164,7 @@ check_tar with_olde-prefix olde-
test_expect_success 'git archive on large files' ' test_expect_success 'git archive on large files' '
test_config core.bigfilethreshold 1 && test_config core.bigfilethreshold 1 &&
git archive HEAD >b3.tar && git archive HEAD >b3.tar &&
test_cmp b.tar b3.tar test_cmp_bin b.tar b3.tar
' '
test_expect_success \ test_expect_success \
@ -173,15 +173,15 @@ test_expect_success \
test_expect_success \ test_expect_success \
'git archive vs. the same in a bare repo' \ 'git archive vs. the same in a bare repo' \
'test_cmp b.tar b3.tar' 'test_cmp_bin b.tar b3.tar'
test_expect_success 'git archive with --output' \ test_expect_success 'git archive with --output' \
'git archive --output=b4.tar HEAD && 'git archive --output=b4.tar HEAD &&
test_cmp b.tar b4.tar' test_cmp_bin b.tar b4.tar'
test_expect_success 'git archive --remote' \ test_expect_success 'git archive --remote' \
'git archive --remote=. HEAD >b5.tar && 'git archive --remote=. HEAD >b5.tar &&
test_cmp b.tar b5.tar' test_cmp_bin b.tar b5.tar'
test_expect_success \ test_expect_success \
'validate file modification time' \ 'validate file modification time' \
@ -198,7 +198,7 @@ test_expect_success \
test_expect_success 'git archive with --output, override inferred format' ' test_expect_success 'git archive with --output, override inferred format' '
git archive --format=tar --output=d4.zip HEAD && git archive --format=tar --output=d4.zip HEAD &&
test_cmp b.tar d4.zip test_cmp_bin b.tar d4.zip
' '
test_expect_success \ test_expect_success \
@ -244,34 +244,34 @@ test_expect_success 'archive --list shows only enabled remote filters' '
test_expect_success 'invoke tar filter by format' ' test_expect_success 'invoke tar filter by format' '
git archive --format=tar.foo HEAD >config.tar.foo && git archive --format=tar.foo HEAD >config.tar.foo &&
tr ab ba <config.tar.foo >config.tar && tr ab ba <config.tar.foo >config.tar &&
test_cmp b.tar config.tar && test_cmp_bin b.tar config.tar &&
git archive --format=bar HEAD >config.bar && git archive --format=bar HEAD >config.bar &&
tr ab ba <config.bar >config.tar && tr ab ba <config.bar >config.tar &&
test_cmp b.tar config.tar test_cmp_bin b.tar config.tar
' '
test_expect_success 'invoke tar filter by extension' ' test_expect_success 'invoke tar filter by extension' '
git archive -o config-implicit.tar.foo HEAD && git archive -o config-implicit.tar.foo HEAD &&
test_cmp config.tar.foo config-implicit.tar.foo && test_cmp_bin config.tar.foo config-implicit.tar.foo &&
git archive -o config-implicit.bar HEAD && git archive -o config-implicit.bar HEAD &&
test_cmp config.tar.foo config-implicit.bar test_cmp_bin config.tar.foo config-implicit.bar
' '
test_expect_success 'default output format remains tar' ' test_expect_success 'default output format remains tar' '
git archive -o config-implicit.baz HEAD && git archive -o config-implicit.baz HEAD &&
test_cmp b.tar config-implicit.baz test_cmp_bin b.tar config-implicit.baz
' '
test_expect_success 'extension matching requires dot' ' test_expect_success 'extension matching requires dot' '
git archive -o config-implicittar.foo HEAD && git archive -o config-implicittar.foo HEAD &&
test_cmp b.tar config-implicittar.foo test_cmp_bin b.tar config-implicittar.foo
' '
test_expect_success 'only enabled filters are available remotely' ' test_expect_success 'only enabled filters are available remotely' '
test_must_fail git archive --remote=. --format=tar.foo HEAD \ test_must_fail git archive --remote=. --format=tar.foo HEAD \
>remote.tar.foo && >remote.tar.foo &&
git archive --remote=. --format=bar >remote.bar HEAD && git archive --remote=. --format=bar >remote.bar HEAD &&
test_cmp remote.bar config.bar test_cmp_bin remote.bar config.bar
' '
test_expect_success GZIP 'git archive --format=tgz' ' test_expect_success GZIP 'git archive --format=tgz' '
@ -280,27 +280,27 @@ test_expect_success GZIP 'git archive --format=tgz' '
test_expect_success GZIP 'git archive --format=tar.gz' ' test_expect_success GZIP 'git archive --format=tar.gz' '
git archive --format=tar.gz HEAD >j1.tar.gz && git archive --format=tar.gz HEAD >j1.tar.gz &&
test_cmp j.tgz j1.tar.gz test_cmp_bin j.tgz j1.tar.gz
' '
test_expect_success GZIP 'infer tgz from .tgz filename' ' test_expect_success GZIP 'infer tgz from .tgz filename' '
git archive --output=j2.tgz HEAD && git archive --output=j2.tgz HEAD &&
test_cmp j.tgz j2.tgz test_cmp_bin j.tgz j2.tgz
' '
test_expect_success GZIP 'infer tgz from .tar.gz filename' ' test_expect_success GZIP 'infer tgz from .tar.gz filename' '
git archive --output=j3.tar.gz HEAD && git archive --output=j3.tar.gz HEAD &&
test_cmp j.tgz j3.tar.gz test_cmp_bin j.tgz j3.tar.gz
' '
test_expect_success GZIP 'extract tgz file' ' test_expect_success GZIP 'extract tgz file' '
gzip -d -c <j.tgz >j.tar && gzip -d -c <j.tgz >j.tar &&
test_cmp b.tar j.tar test_cmp_bin b.tar j.tar
' '
test_expect_success GZIP 'remote tar.gz is allowed by default' ' test_expect_success GZIP 'remote tar.gz is allowed by default' '
git archive --remote=. --format=tar.gz HEAD >remote.tar.gz && git archive --remote=. --format=tar.gz HEAD >remote.tar.gz &&
test_cmp j.tgz remote.tar.gz test_cmp_bin j.tgz remote.tar.gz
' '
test_expect_success GZIP 'remote tar.gz can be disabled' ' test_expect_success GZIP 'remote tar.gz can be disabled' '

View file

@ -68,7 +68,7 @@ test_expect_missing worktree2/ignored-by-worktree
test_expect_success 'git archive vs. bare' ' test_expect_success 'git archive vs. bare' '
(cd bare && git archive HEAD) >bare-archive.tar && (cd bare && git archive HEAD) >bare-archive.tar &&
test_cmp archive.tar bare-archive.tar test_cmp_bin archive.tar bare-archive.tar
' '
test_expect_success 'git archive with worktree attributes, bare' ' test_expect_success 'git archive with worktree attributes, bare' '

View file

@ -97,15 +97,15 @@ test_expect_success \
test_expect_success \ test_expect_success \
'git archive --format=zip vs. the same in a bare repo' \ 'git archive --format=zip vs. the same in a bare repo' \
'test_cmp d.zip d1.zip' 'test_cmp_bin d.zip d1.zip'
test_expect_success 'git archive --format=zip with --output' \ test_expect_success 'git archive --format=zip with --output' \
'git archive --format=zip --output=d2.zip HEAD && 'git archive --format=zip --output=d2.zip HEAD &&
test_cmp d.zip d2.zip' test_cmp_bin d.zip d2.zip'
test_expect_success 'git archive with --output, inferring format' ' test_expect_success 'git archive with --output, inferring format' '
git archive --output=d3.zip HEAD && git archive --output=d3.zip HEAD &&
test_cmp d.zip d3.zip test_cmp_bin d.zip d3.zip
' '
test_expect_success \ test_expect_success \

View file

@ -45,7 +45,7 @@ test_expect_success HEADER_ONLY_TAR_OK 'tar archive of commit with empty tree' '
test_expect_success 'tar archive of empty tree is empty' ' test_expect_success 'tar archive of empty tree is empty' '
git archive --format=tar HEAD: >empty.tar && git archive --format=tar HEAD: >empty.tar &&
perl -e "print \"\\0\" x 10240" >10knuls.tar && perl -e "print \"\\0\" x 10240" >10knuls.tar &&
test_cmp 10knuls.tar empty.tar test_cmp_bin 10knuls.tar empty.tar
' '
test_expect_success 'tar archive of empty tree with prefix' ' test_expect_success 'tar archive of empty tree with prefix' '

View file

@ -617,6 +617,12 @@ test_cmp() {
$GIT_TEST_CMP "$@" $GIT_TEST_CMP "$@"
} }
# test_cmp_bin - helper to compare binary files
test_cmp_bin() {
cmp "$@"
}
# Check if the file expected to be empty is indeed empty, and barfs # Check if the file expected to be empty is indeed empty, and barfs
# otherwise. # otherwise.