diff --git a/pkg/fs/filesystem.go b/pkg/fs/filesystem.go index 79c11d8..6029d6d 100644 --- a/pkg/fs/filesystem.go +++ b/pkg/fs/filesystem.go @@ -93,6 +93,21 @@ func (f *STFS) Create(name string) (afero.File, error) { return nil, os.ErrInvalid } + if _, err := inventory.Stat( + f.metadata, + + filepath.Dir(name), + false, + + f.onHeader, + ); err != nil { + if err == sql.ErrNoRows { + return nil, os.ErrNotExist + } + + return nil, err + } + return f.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) } diff --git a/pkg/fs/filesystem_test.go b/pkg/fs/filesystem_test.go index 53a9ace..10432d0 100644 --- a/pkg/fs/filesystem_test.go +++ b/pkg/fs/filesystem_test.go @@ -653,12 +653,11 @@ var createTests = []struct { createArgs{""}, true, }, - // FIXME: STFS can create file in non-existent directory, which should not be possible - // { - // "Can not create /nonexistent/test.txt", - // createArgs{"/nonexistent/test.txt"}, - // true, - // }, + { + "Can not create /nonexistent/test.txt", + createArgs{"/nonexistent/test.txt"}, + true, + }, } func TestSTFS_Create(t *testing.T) {