1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-10-25 10:27:01 +08:00

Fix t0090 tar&gz unexpected EOF error

License: MIT
Signed-off-by: rht <rhtbot@gmail.com>
This commit is contained in:
rht
2015-09-13 15:41:38 +07:00
parent a8dc708bc4
commit 23dd82f549
3 changed files with 31 additions and 12 deletions

View File

@ -51,8 +51,7 @@ test_get_cmd() {
test_cmp expected actual
'
# TODO: determine why this fails
test_expect_failure "ipfs get -a archive output is valid" '
test_expect_success "ipfs get -a archive output is valid" '
tar -xf "$HASH".tar &&
test_cmp "$HASH" data &&
rm "$HASH".tar &&
@ -68,8 +67,7 @@ test_get_cmd() {
test_cmp expected actual
'
# TODO(mappum)
test_expect_failure "gzipped tar archive output is valid" '
test_expect_success "gzipped tar archive output is valid" '
tar -zxf "$HASH".tar.gz &&
test_cmp "$HASH" data &&
rm "$HASH".tar.gz &&
@ -105,8 +103,7 @@ test_get_cmd() {
test_cmp expected actual
'
# TODO(mappum)
test_expect_failure "gzipped tar archive output is valid (directory)" '
test_expect_success "gzipped tar archive output is valid (directory)" '
tar -zxf "$HASH2".tar.gz &&
test_cmp dir/a "$HASH2"/a &&
test_cmp dir/b/c "$HASH2"/b/c &&

View File

@ -17,6 +17,18 @@ import (
// TODO: does this need to be configurable?
var DefaultBufSize = 1048576
type identityWriteCloser struct {
w io.Writer
}
func (i *identityWriteCloser) Write(p []byte) (int, error) {
return i.w.Write(p)
}
func (i *identityWriteCloser) Close() error {
return nil
}
// DagArchive is equivalent to `ipfs getdag $hash | maybe_tar | maybe_gzip`
func DagArchive(ctx cxt.Context, nd *mdag.Node, name string, dag mdag.DAGService, archive bool, compression int) (io.Reader, error) {
@ -29,15 +41,16 @@ func DagArchive(ctx cxt.Context, nd *mdag.Node, name string, dag mdag.DAGService
bufw := bufio.NewWriterSize(pipew, DefaultBufSize)
// compression determines whether to use gzip compression.
var maybeGzw io.Writer
var maybeGzw io.WriteCloser
var err error
if compression != gzip.NoCompression {
var err error
maybeGzw, err = gzip.NewWriterLevel(bufw, compression)
if err != nil {
pipew.CloseWithError(err)
return nil, err
}
} else {
maybeGzw = bufw
maybeGzw = &identityWriteCloser{bufw}
}
if !archive && compression != gzip.NoCompression {
@ -53,6 +66,11 @@ func DagArchive(ctx cxt.Context, nd *mdag.Node, name string, dag mdag.DAGService
pipew.CloseWithError(err)
return
}
maybeGzw.Close()
if err := bufw.Flush(); err != nil {
pipew.CloseWithError(err)
return
}
pipew.Close() // everything seems to be ok.
}()
} else {
@ -70,11 +88,12 @@ func DagArchive(ctx cxt.Context, nd *mdag.Node, name string, dag mdag.DAGService
pipew.CloseWithError(err)
return
}
w.Close()
maybeGzw.Close()
if err := bufw.Flush(); err != nil {
pipew.CloseWithError(err)
return
}
w.Close()
pipew.Close() // everything seems to be ok.
}()
}

View File

@ -60,8 +60,11 @@ func (w *Writer) writeFile(nd *mdag.Node, pb *upb.Data, fpath string) error {
}
dagr := uio.NewDataFileReader(w.ctx, nd, pb, w.Dag)
_, err := dagr.WriteTo(w.TarW)
return err
if _, err := dagr.WriteTo(w.TarW); err != nil {
return err
}
w.TarW.Flush()
return nil
}
func (w *Writer) WriteNode(nd *mdag.Node, fpath string) error {