Cache files/dirs when added.
License: MIT Signed-off-by: Stephen Whitmore <noffle@ipfs.io>
Stephen Whitmore committed
Apr 6, 2016 at 19:25 UTC
06e710330a1ce6e937fa214998d8da5cbf5a8555
1 file changed
+16
mfs/dir.go
+16
@@ -116,6 +116,11 @@ func (d *Directory) childNode(name string) (FSNode, error) {
116
return nil, err
117
}
118
119
+ return d.cacheNode(name, nd)
120
+}
121
+
122
+// cacheNode caches a node into d.childDirs or d.files and returns the FSNode.
123
+func (d *Directory) cacheNode(name string, nd *dag.Node) (FSNode, error) {
124
i, err := ft.FromBytes(nd.Data)
125
if err != nil {
126
return nil, err
@@ -334,6 +339,17 @@ func (d *Directory) AddChild(name string, nd *dag.Node) error {
339
340
d.modTime = time.Now()
341
342
+ if len(nd.Links) == 0 {
343
+ nfi, err := NewFile(name, nd, d, d.dserv)
344
+ if err != nil {
345
+ return err
346
+ }
347
+ d.files[name] = nfi
348
+ } else {
349
+ ndir := NewDirectory(d.ctx, name, nd, d, d.dserv)
350
+ d.childDirs[name] = ndir
351
+ }
352
+
353
return nil
354
}
355