From b559c3e88aa1430f370ad078b3af71575dfcf8d7 Mon Sep 17 00:00:00 2001 From: Jeromy <jeromyj@gmail.com> Date: Mon, 28 Dec 2015 07:56:19 -0800 Subject: [PATCH] PutNode creates intermediary nodes License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com> --- core/coreunix/add.go | 7 +++++++ mfs/dir.go | 4 +++- mfs/ops.go | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/coreunix/add.go b/core/coreunix/add.go index f045b9821..50aabd337 100644 --- a/core/coreunix/add.go +++ b/core/coreunix/add.go @@ -328,6 +328,13 @@ func (adder *Adder) addNode(node *dag.Node, path string) error { path = key.Pretty() } + dir := gopath.Dir(path) + if dir != "." { + if err := mfs.Mkdir(adder.mr, dir, true); err != nil { + return err + } + } + if err := mfs.PutNode(adder.mr, path, node); err != nil { return err } diff --git a/mfs/dir.go b/mfs/dir.go index 43271fe49..946d9e9a4 100644 --- a/mfs/dir.go +++ b/mfs/dir.go @@ -268,7 +268,9 @@ func (d *Directory) Mkdir(name string) (*Directory, error) { return nil, err } - return d.childDir(name) + dirobj := NewDirectory(d.ctx, name, ndir, d, d.dserv) + d.childDirs[name] = dirobj + return dirobj, nil } func (d *Directory) Unlink(name string) error { diff --git a/mfs/ops.go b/mfs/ops.go index fc36b2256..59c6e239b 100644 --- a/mfs/ops.go +++ b/mfs/ops.go @@ -116,7 +116,10 @@ func Mkdir(r *Root, pth string, parents bool) error { if len(parts) == 0 { // this will only happen on 'mkdir /' - return fmt.Errorf("cannot mkdir '%s'", pth) + if parents { + return nil + } + return fmt.Errorf("cannot create directory '/': Already exists") } cur := r.GetValue().(*Directory) -- GitLab