From 0c9efa43241214d02338d713964e9730cf3f752f Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Fri, 27 Feb 2015 17:36:24 -0500 Subject: [PATCH] tar/asm: finish the buffer FileGetPutter --- tar/asm/getter.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/tar/asm/getter.go b/tar/asm/getter.go index 372aea2..1ea7b3d 100644 --- a/tar/asm/getter.go +++ b/tar/asm/getter.go @@ -1,6 +1,8 @@ package asm import ( + "bytes" + "errors" "io" "os" "path" @@ -13,7 +15,7 @@ type FileGetter interface { type FilePutter interface { // Put returns a stream for the provided file path - Put(string, io.Writer) error + Put(string, io.Reader) error } type FileGetPutter interface { @@ -40,16 +42,29 @@ type bufferFileGetPutter struct { } func (bfgp bufferFileGetPutter) Get(name string) (io.ReadCloser, error) { - + if _, ok := bfgp.files[name]; !ok { + return nil, errors.New("no such file") + } + b := bytes.NewBuffer(bfgp.files[name]) + return &readCloserWrapper{b}, nil } -type writeCloserWrapper struct { - io.Writer - closer func() error +func (bfgp *bufferFileGetPutter) Put(name string, r io.Reader) error { + b := bytes.NewBuffer([]byte{}) + if _, err := io.Copy(b, r); err != nil { + return err + } + bfgp.files[name] = b.Bytes() + return nil } -func (w *nopWriteCloser) Close() error { return nil } +type readCloserWrapper struct { + io.Reader +} +func (w *readCloserWrapper) Close() error { return nil } + +// NewBufferFileGetPutter is simple in memory FileGetPutter func NewBufferFileGetPutter() FileGetPutter { return &bufferFileGetPutter{} }