Compare commits

...

2 Commits

Author SHA1 Message Date
d7e3dfdb0f Added NewOsFsBallback.
- Creates a new OS file system with a fallback on an afero.Fs.
Exposed the file system used as source for the CopyDir.
2020-03-08 17:21:11 +01:00
2985b28851 Adds FindFs and MustFindFs for the RiceFs. 2020-03-08 17:13:00 +01:00
3 changed files with 27 additions and 0 deletions

View File

@ -11,10 +11,27 @@ import (
var _ afero.Fs = &RiceFs{} var _ afero.Fs = &RiceFs{}
// FindFs tries to find a rice.Box by its name and wraps in into a RiceFs.
func FindFs(name string) (*RiceFs, error) {
box, err := rice.FindBox(name)
if err != nil {
return nil, err
}
return NewFs(box), nil
}
// NewFs creates a new RiceFs based on the supplied rice.Box.
func NewFs(b *rice.Box) *RiceFs { func NewFs(b *rice.Box) *RiceFs {
return &RiceFs{b} return &RiceFs{b}
} }
// MustFindFs tries to find a rice.Box by its name and wraps in into a RiceFs. If the box is not found the method panics.
func MustFindFs(name string) *RiceFs {
box := rice.MustFindBox(name)
return NewFs(box)
}
// RiceFs represents an afero.Fs based on an underlying rice.Box.
type RiceFs struct { type RiceFs struct {
Box *rice.Box Box *rice.Box
} }

View File

@ -9,7 +9,9 @@ import (
"github.com/spf13/afero" "github.com/spf13/afero"
) )
// CopyDir represents a directory that is mimicked on hard drive.
type CopyDir interface { type CopyDir interface {
Fs() afero.Fs
Retrieve(name string) (string, error) Retrieve(name string) (string, error)
Path(name string) string Path(name string) string
Open(name string) (*os.File, error) Open(name string) (*os.File, error)
@ -31,6 +33,8 @@ func NewCopyDir(fs afero.Fs) (CopyDir, error) {
return &copyDir{fs, dir}, nil return &copyDir{fs, dir}, nil
} }
func (d *copyDir) Fs() afero.Fs { return d.fs }
func (d *copyDir) Retrieve(name string) (string, error) { func (d *copyDir) Retrieve(name string) (string, error) {
var path = d.Path(name) var path = d.Path(name)
if _, err := os.Stat(path); os.IsNotExist(err) { if _, err := os.Stat(path); os.IsNotExist(err) {

View File

@ -20,6 +20,12 @@ func NewFallbackFs(source, backup afero.Fs) *FallbackFs {
return &FallbackFs{source, backup} return &FallbackFs{source, backup}
} }
// NewOsFsFallback creates a new Fs based on the os package, restricts access on the supplied path and uses backup as fallback.
func NewOsFsFallback(path string, backup afero.Fs) *FallbackFs {
osFs := afero.NewOsFs()
return NewFallbackFs(afero.NewBasePathFs(osFs, path), backup)
}
func (f *FallbackFs) do(action func(afero.Fs) error) error { func (f *FallbackFs) do(action func(afero.Fs) error) error {
err := action(f.source) err := action(f.source)
if err == nil { if err == nil {