From f548a404ae1f1f65762f3ea3a3cd9181c0e149df Mon Sep 17 00:00:00 2001 From: Jeromy Date: Fri, 18 Dec 2015 22:12:39 -0800 Subject: [PATCH] just flush dir in mkdir flush, not whole tree License: MIT Signed-off-by: Jeromy --- core/commands/files/files.go | 17 +++++------------ core/coreunix/add.go | 4 ++-- mfs/dir.go | 22 +++++++++++++--------- mfs/ops.go | 11 +++++++++-- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/core/commands/files/files.go b/core/commands/files/files.go index cf429c734..2bb585374 100644 --- a/core/commands/files/files.go +++ b/core/commands/files/files.go @@ -586,24 +586,17 @@ Examples: return } - err = mfs.Mkdir(n.FilesRoot, dirtomake, dashp) - if err != nil { - res.SetError(err, cmds.ErrNormal) - return - } - flush, found, _ := req.Option("flush").Bool() if !found { flush = true } - if flush { - err := n.FilesRoot.Flush() - if err != nil { - res.SetError(err, cmds.ErrNormal) - return - } + err = mfs.Mkdir(n.FilesRoot, dirtomake, dashp, flush) + if err != nil { + res.SetError(err, cmds.ErrNormal) + return } + }, } diff --git a/core/coreunix/add.go b/core/coreunix/add.go index 430f6e677..c898109af 100644 --- a/core/coreunix/add.go +++ b/core/coreunix/add.go @@ -330,7 +330,7 @@ func (adder *Adder) addNode(node *dag.Node, path string) error { dir := gopath.Dir(path) if dir != "." { - if err := mfs.Mkdir(adder.mr, dir, true); err != nil { + if err := mfs.Mkdir(adder.mr, dir, true, false); err != nil { return err } } @@ -403,7 +403,7 @@ func (adder *Adder) addFile(file files.File) error { func (adder *Adder) addDir(dir files.File) error { log.Infof("adding directory: %s", dir.FileName()) - err := mfs.Mkdir(adder.mr, dir.FileName(), true) + err := mfs.Mkdir(adder.mr, dir.FileName(), true, false) if err != nil { return err } diff --git a/mfs/dir.go b/mfs/dir.go index 8ca79e74a..3ec39bf7d 100644 --- a/mfs/dir.go +++ b/mfs/dir.go @@ -278,11 +278,6 @@ func (d *Directory) Mkdir(name string) (*Directory, error) { return nil, err } - err = d.flushUp() - if err != nil { - return nil, err - } - dirobj := NewDirectory(d.ctx, name, ndir, d, d.dserv) d.childDirs[name] = dirobj return dirobj, nil @@ -300,14 +295,23 @@ func (d *Directory) Unlink(name string) error { return err } - return d.flushUp() -} - -func (d *Directory) flushUp() error { + _, err = d.dserv.Add(d.node) + if err != nil { + return err + } return d.parent.closeChild(d.name, d.node) } +func (d *Directory) Flush() error { + nd, err := d.flushCurrentNode() + if err != nil { + return err + } + + return d.parent.closeChild(d.name, nd) +} + // AddChild adds the node 'nd' under this directory giving it the name 'name' func (d *Directory) AddChild(name string, nd *dag.Node) error { d.lock.Lock() diff --git a/mfs/ops.go b/mfs/ops.go index 59c6e239b..d21f71770 100644 --- a/mfs/ops.go +++ b/mfs/ops.go @@ -100,7 +100,7 @@ func PutNode(r *Root, path string, nd *dag.Node) error { // Mkdir creates a directory at 'path' under the directory 'd', creating // intermediary directories as needed if 'parents' is set to true -func Mkdir(r *Root, pth string, parents bool) error { +func Mkdir(r *Root, pth string, parents bool, flush bool) error { if pth == "" { return nil } @@ -142,13 +142,20 @@ func Mkdir(r *Root, pth string, parents bool) error { cur = next } - _, err := cur.Mkdir(parts[len(parts)-1]) + final, err := cur.Mkdir(parts[len(parts)-1]) if err != nil { if !parents || err != os.ErrExist { return err } } + if flush { + err := final.Flush() + if err != nil { + return err + } + } + return nil }