diff --git a/file.go b/file.go index aaf7c2d..65d82f9 100644 --- a/file.go +++ b/file.go @@ -40,7 +40,9 @@ type file struct { func (f *file) rewind() { if f.reader != nil { - f.reader.Seek(0, os.SEEK_SET) + if _, err := f.reader.Seek(0, os.SEEK_SET); err != nil { + panic(err) + } } } @@ -49,19 +51,27 @@ func (f *file) export(dstPath string) error { return err } - if err := f.cache(); err != nil { - return err - } - - fh, err := os.Create(dstPath) + fw, err := os.Create(dstPath) if err != nil { return err } - defer fh.Close() + defer fw.Close() - f.rewind() - if _, err := f.WriteTo(fh); err != nil { - return err + if f.reader == nil { + fr, err := os.Open(f.asset) + if err != nil { + return err + } + defer fr.Close() + + if _, err := io.Copy(fw, fr); err != nil { + return err + } + } else { + f.rewind() + if _, err := f.WriteTo(fw); err != nil { + return err + } } return nil diff --git a/stage.go b/stage.go index 59c457d..f6dc1eb 100644 --- a/stage.go +++ b/stage.go @@ -85,9 +85,12 @@ func (s *stage) chain(p Plugin) { wg.Add(1) go func(f *file) { defer wg.Done() + + f.rewind() if err := proc.Process(s, f); err != nil { s.gs.fault(s, f, err) } + dispatch(f) }(f) }