summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 834d9eb)
raw | patch | inline | side by side (parent: 834d9eb)
author | Jonathan Nieder <jrnieder@gmail.com> | |
Mon, 13 Dec 2010 09:28:05 +0000 (03:28 -0600) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Sun, 19 Dec 2010 21:51:09 +0000 (13:51 -0800) |
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>
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>
t/t9300-fast-import.sh | patch | blob | history |
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index 5a1925f690fe309436a06534addf26a30bc10e1f..222d1059ef99879d3db387be798f973fb093f53e 100755 (executable)
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh
. ./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'
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
EOF
read blob_id type size <&3 &&
- dd of=actual bs=1 count=$size <&3 &&
+ head_c $size >actual <&3 &&
read newline <&3 &&
echo
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