just flush dir in mkdir flush, not whole tree
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Dec 18, 2015 at 22:12 UTC
f548a404ae1f1f65762f3ea3a3cd9181c0e149df
4 files changed
+28
-24
core/commands/files/files.go
+5
-12
@@ -586,24 +586,17 @@ Examples:
586
return
587
}
588
589
- err = mfs.Mkdir(n.FilesRoot, dirtomake, dashp)
590
- if err != nil {
591
- res.SetError(err, cmds.ErrNormal)
592
- return
593
- }
594
-
589
flush, found, _ := req.Option("flush").Bool()
590
if !found {
591
flush = true
592
}
593
600
- if flush {
601
- err := n.FilesRoot.Flush()
602
- if err != nil {
603
- res.SetError(err, cmds.ErrNormal)
604
- return
605
- }
594
+ err = mfs.Mkdir(n.FilesRoot, dirtomake, dashp, flush)
595
+ if err != nil {
596
+ res.SetError(err, cmds.ErrNormal)
597
+ return
598
}
599
+
600
},
601
}
602
core/coreunix/add.go
+2
-2
@@ -330,7 +330,7 @@ func (adder *Adder) addNode(node *dag.Node, path string) error {
330
331
dir := gopath.Dir(path)
332
if dir != "." {
333
- if err := mfs.Mkdir(adder.mr, dir, true); err != nil {
333
+ if err := mfs.Mkdir(adder.mr, dir, true, false); err != nil {
334
return err
335
}
336
}
@@ -403,7 +403,7 @@ func (adder *Adder) addFile(file files.File) error {
403
func (adder *Adder) addDir(dir files.File) error {
404
log.Infof("adding directory: %s", dir.FileName())
405
406
- err := mfs.Mkdir(adder.mr, dir.FileName(), true)
406
+ err := mfs.Mkdir(adder.mr, dir.FileName(), true, false)
407
if err != nil {
408
return err
409
}
mfs/dir.go
+12
-8
@@ -278,11 +278,6 @@ func (d *Directory) Mkdir(name string) (*Directory, error) {
278
return nil, err
279
}
280
281
- err = d.flushUp()
282
- if err != nil {
283
- return nil, err
284
- }
285
-
281
dirobj := NewDirectory(d.ctx, name, ndir, d, d.dserv)
282
d.childDirs[name] = dirobj
283
return dirobj, nil
@@ -300,12 +295,21 @@ func (d *Directory) Unlink(name string) error {
295
return err
296
}
297
303
- return d.flushUp()
298
+ _, err = d.dserv.Add(d.node)
299
+ if err != nil {
300
+ return err
301
+ }
302
+
303
+ return d.parent.closeChild(d.name, d.node)
304
}
305
306
-func (d *Directory) flushUp() error {
306
+func (d *Directory) Flush() error {
307
+ nd, err := d.flushCurrentNode()
308
+ if err != nil {
309
+ return err
310
+ }
311
308
- return d.parent.closeChild(d.name, d.node)
312
+ return d.parent.closeChild(d.name, nd)
313
}
314
315
// AddChild adds the node 'nd' under this directory giving it the name 'name'
mfs/ops.go
+9
-2
@@ -100,7 +100,7 @@ func PutNode(r *Root, path string, nd *dag.Node) error {
100
101
// Mkdir creates a directory at 'path' under the directory 'd', creating
102
// intermediary directories as needed if 'parents' is set to true
103
-func Mkdir(r *Root, pth string, parents bool) error {
103
+func Mkdir(r *Root, pth string, parents bool, flush bool) error {
104
if pth == "" {
105
return nil
106
}
@@ -142,13 +142,20 @@ func Mkdir(r *Root, pth string, parents bool) error {
142
cur = next
143
}
144
145
- _, err := cur.Mkdir(parts[len(parts)-1])
145
+ final, err := cur.Mkdir(parts[len(parts)-1])
146
if err != nil {
147
if !parents || err != os.ErrExist {
148
return err
149
}
150
}
151
152
+ if flush {
153
+ err := final.Flush()
154
+ if err != nil {
155
+ return err
156
+ }
157
+ }
158
+
159
return nil
160
}
161