diff options
author | Alan Pearce | 2025-01-26 21:33:23 +0100 |
---|---|---|
committer | Alan Pearce | 2025-01-26 21:33:23 +0100 |
commit | e616014e22fca30cb6375352f70f73d234cb1f7c (patch) | |
tree | ffe6b3981569fe5e6861f066353021d75efac951 | |
parent | abea3d93a675f0689d4a8833825546d7ac01942a (diff) | |
download | website-e616014e22fca30cb6375352f70f73d234cb1f7c.tar.lz website-e616014e22fca30cb6375352f70f73d234cb1f7c.tar.zst website-e616014e22fca30cb6375352f70f73d234cb1f7c.zip |
move copyRecursive to builder
-rw-r--r-- | internal/builder/builder.go | 37 | ||||
-rw-r--r-- | internal/storage/files/writer.go | 59 |
2 files changed, 48 insertions, 48 deletions
diff --git a/internal/builder/builder.go b/internal/builder/builder.go index 90df0f1..7b12315 100644 --- a/internal/builder/builder.go +++ b/internal/builder/builder.go @@ -2,6 +2,9 @@ package builder import ( "fmt" + "io" + "io/fs" + "os" "path" "path/filepath" "slices" @@ -34,6 +37,38 @@ func joinSourcePath(src string) func(string) string { } } +func copyRecursive(storage storage.Writer, src string) error { + return filepath.WalkDir(src, func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + rel, err := filepath.Rel(src, path) + if err != nil { + return err + } + if d.IsDir() { + return storage.Mkdirp(rel) + } + + sf, err := os.Open(path) + if err != nil { + return err + } + defer sf.Close() + df, err := storage.OpenFileAndVariants(rel) + if err != nil { + return err + } + defer df.Close() + if _, err := io.Copy(df, sf); err != nil { + return err + } + + return nil + }) + +} + func build(ioConfig *IOConfig, config *config.Config, log *log.Logger) (*Result, error) { storage := files.NewWriter(ioConfig.Destination, log, &files.Options{ Compress: !ioConfig.Development, @@ -46,7 +81,7 @@ func build(ioConfig *IOConfig, config *config.Config, log *log.Logger) (*Result, Hashes: make([]string, 0), } - err := storage.CopyRecursive(joinSource("static")) + err := copyRecursive(storage, joinSource("static")) if err != nil { return nil, errors.WithMessage(err, "could not copy static files") } diff --git a/internal/storage/files/writer.go b/internal/storage/files/writer.go index f0fe6a9..cd227c0 100644 --- a/internal/storage/files/writer.go +++ b/internal/storage/files/writer.go @@ -4,7 +4,6 @@ import ( "compress/gzip" "context" "io" - "io/fs" "os" "path/filepath" "strings" @@ -39,48 +38,16 @@ func NewWriter(outputDirectory string, logger *log.Logger, opts *Options) *Files } } -func (f *Files) CopyRecursive(src string) error { - return filepath.WalkDir(src, func(path string, d fs.DirEntry, err error) error { - if err != nil { - return err - } - rel, err := filepath.Rel(src, path) - if err != nil { - return err - } - if d.IsDir() { - return f.mkdirp(rel) - } - - sf, err := os.Open(path) - if err != nil { - return err - } - defer sf.Close() - df, err := f.openFileAndVariants(filepath.Join(f.outputDirectory, rel)) - if err != nil { - return err - } - defer df.Close() - if _, err := io.Copy(df, sf); err != nil { - return err - } - - return nil - }) -} - func (f *Files) Open(filename string) (io.ReadCloser, error) { return os.Open(f.join(filename)) } func (f *Files) OutputToFile(output io.Reader, filename string) error { - fn := f.join(filename) - if err := f.mkdirp(filepath.Dir(filename)); err != nil { + if err := f.Mkdirp(filepath.Dir(filename)); err != nil { return err } - f.log.Debug("outputting file", "filename", fn) - file, err := f.openFileAndVariants(fn) + f.log.Debug("outputting file", "filename", filename) + file, err := f.OpenFileAndVariants(filename) if err != nil { return errors.WithMessage(err, "could not open output file") } @@ -94,12 +61,11 @@ func (f *Files) OutputToFile(output io.Reader, filename string) error { } func (f *Files) RenderToFile(component templ.Component, filename string) error { - fn := f.join(filename) - if err := f.mkdirp(filepath.Dir(filename)); err != nil { + if err := f.Mkdirp(filepath.Dir(filename)); err != nil { return err } f.log.Debug("outputting file", "filename", filename) - file, err := f.openFileAndVariants(fn) + file, err := f.OpenFileAndVariants(filename) if err != nil { return errors.WithMessage(err, "could not open output file") } @@ -113,12 +79,11 @@ func (f *Files) RenderToFile(component templ.Component, filename string) error { } func (f *Files) WriterToFile(writer io.WriterTo, filename string) error { - fn := f.join(filename) - if err := f.mkdirp(filepath.Dir(filename)); err != nil { + if err := f.Mkdirp(filepath.Dir(filename)); err != nil { return err } - f.log.Debug("outputting file", "filename", fn) - file, err := f.openFileAndVariants(fn) + f.log.Debug("outputting file", "filename", filename) + file, err := f.OpenFileAndVariants(filename) if err != nil { return errors.WithMessage(err, "could not open output file") } @@ -196,15 +161,15 @@ func multiOpenFile(filename string) (*MultiWriteCloser, error) { }, nil } -func (f *Files) openFileAndVariants(filename string) (io.WriteCloser, error) { +func (f *Files) OpenFileAndVariants(filename string) (io.WriteCloser, error) { if f.options.Compress { - return multiOpenFile(filename) + return multiOpenFile(f.join(filename)) } - return openFileWrite(filename) + return openFileWrite(f.join(filename)) } -func (f *Files) mkdirp(dir string) error { +func (f *Files) Mkdirp(dir string) error { f.log.Debug("creating directory", "dir", dir) err := os.MkdirAll(filepath.Join(f.outputDirectory, dir), 0755) |