diff --git a/copyOnWriteFs.go b/copyOnWriteFs.go index 039ce53..fa0c936 100644 --- a/copyOnWriteFs.go +++ b/copyOnWriteFs.go @@ -1,11 +1,11 @@ package afero import ( + "fmt" "os" "path/filepath" "syscall" "time" - "fmt" ) // The CopyOnWriteFs is a union filesystem: a read only base file system with @@ -147,7 +147,7 @@ func (u *CopyOnWriteFs) OpenFile(name string, flag int, perm os.FileMode) (File, dir := filepath.Dir(name) isaDir, err := IsDir(u.base, dir) - if err != nil { + if err != nil && !os.IsNotExist(err) { return nil, err } if isaDir { diff --git a/copyOnWriteFs_test.go b/copyOnWriteFs_test.go new file mode 100644 index 0000000..2a00fab --- /dev/null +++ b/copyOnWriteFs_test.go @@ -0,0 +1,23 @@ +package afero + +import "testing" + +func TestCopyOnWrite(t *testing.T) { + var fs Fs + var err error + base := NewOsFs() + roBase := NewReadOnlyFs(base) + ufs := NewCopyOnWriteFs(roBase, NewMemMapFs()) + fs = ufs + err = fs.MkdirAll("nonexistent/directory/", 0744) + if err != nil { + t.Error(err) + return + } + _, err = fs.Create("nonexistent/directory/newfile") + if err != nil { + t.Error(err) + return + } + +}