func unpackIt(a archive.Archive, src string) error { reader, writer := io.Pipe() cw := make(chan error, 1) defer close(cw) f, err := os.Open(src) if err != nil { return err } go func() { defer writer.Close() _, err = io.Copy(writer, f) if err != nil { cw <- err return } }() return a.Unpack("/tmp/extracted", reader) }
func restoreCache(src string, s storage.Storage, a archive.Archive) error { reader, writer := io.Pipe() cw := make(chan error, 1) defer close(cw) go func() { defer writer.Close() cw <- s.Get(src, writer) }() err := a.Unpack("", reader) werr := <-cw if werr != nil { return werr } return err }