From a808df501932f4691e8cb5b20ee438b3f604bc38 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Fri, 11 May 2018 02:27:57 -0700 Subject: [PATCH] visit parent folder first --- weed/filer2/filer.go | 10 +++++++--- weed/filer2/filer_test.go | 10 ++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/weed/filer2/filer.go b/weed/filer2/filer.go index 0851b4142..0592c7848 100644 --- a/weed/filer2/filer.go +++ b/weed/filer2/filer.go @@ -39,7 +39,7 @@ func (f *Filer) CreateEntry(entry Entry) (error) { 3. add the file entry */ - f.recursivelyEnsureDirectory(entry.Dir, func(parent, name string) error { + recursivelyEnsureDirectory(entry.Dir, func(parent, name string) error { return nil }) @@ -66,7 +66,7 @@ func (f *Filer) UpdateEntry(entry Entry) (error) { return f.store.UpdateEntry(entry) } -func (f *Filer) recursivelyEnsureDirectory(fullPath string, fn func(parent, name string) error) (error) { +func recursivelyEnsureDirectory(fullPath string, fn func(parent, name string) error) (error) { if strings.HasSuffix(fullPath, "/") { fullPath = fullPath[0:len(fullPath)-1] } @@ -82,11 +82,15 @@ func (f *Filer) recursivelyEnsureDirectory(fullPath string, fn func(parent, name parentDirPath = "/" } + if err := recursivelyEnsureDirectory(parentDirPath, fn); err != nil { + return err + } + if err := fn(parentDirPath, dirName); err != nil { return err } - return f.recursivelyEnsureDirectory(parentDirPath, fn) + return nil } func (f *Filer) cacheGetDirectory(dirpath string) (error) { diff --git a/weed/filer2/filer_test.go b/weed/filer2/filer_test.go index 0cefb679a..bafc25cf0 100644 --- a/weed/filer2/filer_test.go +++ b/weed/filer2/filer_test.go @@ -7,21 +7,19 @@ import ( ) func TestRecursion(t *testing.T) { - filer := NewFiler("") - fullPath := "/home/chris/some/file/abc.jpg" expected := []string{ - "/home/chris/some", "file", - "/home/chris", "some", - "/home", "chris", "/", "home", + "/home", "chris", + "/home/chris", "some", + "/home/chris/some", "file", } dir, _ := filepath.Split(fullPath) i := 0 - filer.recursivelyEnsureDirectory(dir, func(parent, name string) error { + recursivelyEnsureDirectory(dir, func(parent, name string) error { if parent != expected[i] || name != expected[i+1] { t.Errorf("recursive directory is wrong! parent=%s dirName=%s", parent, name) }