Modify configuration structure. (#49)
This commit is contained in:
parent
cfede1d8f1
commit
5bb067be1a
16 changed files with 352 additions and 170 deletions
24
fs/container.go
Normal file
24
fs/container.go
Normal file
|
@ -0,0 +1,24 @@
|
|||
package fs
|
||||
|
||||
type ContainerFs struct {
|
||||
s *storage
|
||||
}
|
||||
|
||||
func NewContainerFs(fss map[string]Filesystem) (*ContainerFs, error) {
|
||||
s := newStorage(SupportedFactories)
|
||||
for p, fs := range fss {
|
||||
if err := s.AddFS(fs, p); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return &ContainerFs{s: s}, nil
|
||||
}
|
||||
|
||||
func (fs *ContainerFs) Open(filename string) (File, error) {
|
||||
return fs.s.Get(filename)
|
||||
}
|
||||
|
||||
func (fs *ContainerFs) ReadDir(path string) (map[string]File, error) {
|
||||
return fs.s.Children(path), nil
|
||||
}
|
28
fs/container_test.go
Normal file
28
fs/container_test.go
Normal file
|
@ -0,0 +1,28 @@
|
|||
package fs
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestContainer(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
require := require.New(t)
|
||||
|
||||
fss := map[string]Filesystem{
|
||||
"/test": &DummyFs{},
|
||||
}
|
||||
|
||||
c, err := NewContainerFs(fss)
|
||||
require.NoError(err)
|
||||
|
||||
f, err := c.Open("/test/dir/here")
|
||||
require.NoError(err)
|
||||
require.NotNil(f)
|
||||
|
||||
files, err := c.ReadDir("/")
|
||||
require.NoError(err)
|
||||
require.Len(files, 1)
|
||||
}
|
|
@ -48,6 +48,22 @@ func (s *storage) Has(path string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (s *storage) AddFS(fs Filesystem, p string) error {
|
||||
p = clean(p)
|
||||
if s.Has(p) {
|
||||
if dir, err := s.Get(p); err == nil {
|
||||
if !dir.IsDir() {
|
||||
return os.ErrExist
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
s.filesystems[p] = fs
|
||||
return s.createParent(p, &Dir{})
|
||||
}
|
||||
|
||||
func (s *storage) Add(f File, p string) error {
|
||||
p = clean(p)
|
||||
if s.Has(p) {
|
||||
|
@ -72,9 +88,7 @@ func (s *storage) Add(f File, p string) error {
|
|||
s.files[p] = f
|
||||
}
|
||||
|
||||
s.createParent(p, f)
|
||||
|
||||
return nil
|
||||
return s.createParent(p, f)
|
||||
}
|
||||
|
||||
func (s *storage) createParent(p string, f File) error {
|
||||
|
|
|
@ -102,6 +102,24 @@ func TestStorageWindowsPath(t *testing.T) {
|
|||
require.Equal(&Dummy{}, file)
|
||||
}
|
||||
|
||||
func TestStorageAddFs(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
require := require.New(t)
|
||||
|
||||
s := newStorage(dummyFactories)
|
||||
|
||||
err := s.AddFS(&DummyFs{}, "/test")
|
||||
require.NoError(err)
|
||||
|
||||
f, err := s.Get("/test/dir/here/file1.txt")
|
||||
require.NoError(err)
|
||||
require.NotNil(f)
|
||||
|
||||
err = s.AddFS(&DummyFs{}, "/test")
|
||||
require.Error(err)
|
||||
}
|
||||
|
||||
var _ Filesystem = &DummyFs{}
|
||||
|
||||
type DummyFs struct {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue