diff options
author | Jonathan Nieder <jrnieder@gmail.com> | 2010-12-13 03:28:05 -0600 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-12-19 13:51:09 -0800 |
commit | 4de0bbd8985ea057050994c5b254c9ef3d845c1e (patch) | |
tree | 6707c25e955164a7930d15818dd52b825434fe7e /t/t9300-fast-import.sh | |
parent | 834d9eb6b70a3447c2ad514f9c0e052bc43e8c8a (diff) | |
download | git-4de0bbd8985ea057050994c5b254c9ef3d845c1e.tar.gz |
t9300: use perl "head -c" clone in place of "dd bs=1 count=16000" kluge
It is unfortunate to have to issue thousands of one-byte read calls to
work around dd's refusal to buffer input that would fill a block after
a short read (a3a6f4, 2010-12-13). We could do better by using
"head -c", if it were available on all platforms we cared about.
Replace it with some simple perl.
While doing so, restructure 9300.114 to use a subshell instead of a
script. Subshells can inherit functions (like the new head_c) from
the parent shell while external scripts cannot.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t9300-fast-import.sh')
-rwxr-xr-x | t/t9300-fast-import.sh | 84 |
1 files changed, 49 insertions, 35 deletions
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index 5a1925f690..222d1059ef 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -7,6 +7,23 @@ test_description='test git fast-import utility' . ./test-lib.sh . "$TEST_DIRECTORY"/diff-lib.sh ;# test-lib chdir's into trash +# Print $1 bytes from stdin to stdout. +# +# This could be written as "head -c $1", but IRIX "head" does not +# support the -c option. +head_c () { + perl -e ' + my $len = $ARGV[1]; + while ($len > 0) { + my $s; + my $nread = sysread(STDIN, $s, $len); + die "cannot read: $!" unless defined($nread); + print $s; + $len -= $nread; + } + ' - "$1" +} + file2_data='file2 second line of EOF' @@ -1888,44 +1905,41 @@ test_expect_success PIPE 'R: copy using cat-file' ' rm -f blobs && cat >frontend <<-\FRONTEND_END && #!/bin/sh - cat <<EOF && - feature cat-blob - blob - mark :1 - data <<BLOB - EOF - cat big - cat <<EOF - BLOB - cat-blob :1 - EOF - - read blob_id type size <&3 && - echo "$blob_id $type $size" >response && - dd of=blob bs=1 count=$size <&3 && - read newline <&3 && - - cat <<EOF && - commit refs/heads/copied - committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE - data <<COMMIT - copy big file as file3 - COMMIT - M 644 inline file3 - data <<BLOB - EOF - cat blob && - cat <<EOF - BLOB - EOF FRONTEND_END mkfifo blobs && ( export GIT_COMMITTER_NAME GIT_COMMITTER_EMAIL GIT_COMMITTER_DATE && - sh frontend 3<blobs | - git fast-import --cat-blob-fd=3 3>blobs - ) && + cat <<-\EOF && + feature cat-blob + blob + mark :1 + data <<BLOB + EOF + cat big && + cat <<-\EOF && + BLOB + cat-blob :1 + EOF + + read blob_id type size <&3 && + echo "$blob_id $type $size" >response && + head_c $size >blob <&3 && + read newline <&3 && + + cat <<-EOF && + commit refs/heads/copied + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + copy big file as file3 + COMMIT + M 644 inline file3 + data <<BLOB + EOF + cat blob && + echo BLOB + ) 3<blobs | + git fast-import --cat-blob-fd=3 3>blobs && git show copied:file3 >actual && test_cmp expect.response response && test_cmp big actual @@ -1953,7 +1967,7 @@ test_expect_success PIPE 'R: print blob mid-commit' ' EOF read blob_id type size <&3 && - dd of=actual bs=1 count=$size <&3 && + head_c $size >actual <&3 && read newline <&3 && echo @@ -1988,7 +2002,7 @@ test_expect_success PIPE 'R: print staged blob within commit' ' echo "cat-blob $to_get" && read blob_id type size <&3 && - dd of=actual bs=1 count=$size <&3 && + head_c $size >actual <&3 && read newline <&3 && echo deleteall |