files2.0: split adder.addFile into subtyped functions
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Dec 14, 2018 at 12:44 UTC
1fe28bc658d22de414c142a100fd3c6f27f76ad7
1 file changed
+31
-27
core/coreunix/add.go
+31
-27
@@ -322,7 +322,7 @@ func AddR(n *core.IpfsNode, root string) (key string, err error) {
322
return "", err
323
}
324
325
- err = fileAdder.addFile(filepath.Base(root), f)
325
+ err = fileAdder.addFileNode(filepath.Base(root), f)
326
if err != nil {
327
return "", err
328
}
@@ -348,7 +348,7 @@ func AddWrapped(n *core.IpfsNode, r io.Reader, filename string) (string, ipld.No
348
349
defer n.Blockstore.PinLock().Unlock()
350
351
- err = fileAdder.addFile(filename, files.NewReaderFile(r))
351
+ err = fileAdder.addFileNode(filename, files.NewReaderFile(r))
352
if err != nil {
353
return "", nil, err
354
}
@@ -416,7 +416,7 @@ func (adder *Adder) AddAllAndPin(file files.Node) (ipld.Node, error) {
416
// semantics.
417
it := tf.Entries()
418
for it.Next() {
419
- if err := adder.addFile(it.Name(), it.Node()); err != nil {
419
+ if err := adder.addFileNode(it.Name(), it.Node()); err != nil {
420
return nil, err
421
}
422
}
@@ -425,7 +425,7 @@ func (adder *Adder) AddAllAndPin(file files.Node) (ipld.Node, error) {
425
}
426
break
427
default:
428
- if err := adder.addFile("", file); err != nil {
428
+ if err := adder.addFileNode("", file); err != nil {
429
return nil, err
430
}
431
break
@@ -443,7 +443,7 @@ func (adder *Adder) AddAllAndPin(file files.Node) (ipld.Node, error) {
443
return nd, adder.PinRoot()
444
}
445
446
-func (adder *Adder) addFile(path string, file files.Node) error {
446
+func (adder *Adder) addFileNode(path string, file files.Node) error {
447
defer file.Close()
448
err := adder.maybePauseForGC()
449
if err != nil {
@@ -464,34 +464,38 @@ func (adder *Adder) addFile(path string, file files.Node) error {
464
}
465
adder.liveNodes++
466
467
- if dir, ok := file.(files.Directory); ok {
468
- return adder.addDir(path, dir)
467
+ switch f := file.(type) {
468
+ case files.Directory:
469
+ return adder.addDir(path, f)
470
+ case *files.Symlink:
471
+ return adder.addSymlink(path, f)
472
+ case files.File:
473
+ return adder.addFile(path, f)
474
+ default:
475
+ return errors.New("unknown file type")
476
}
477
+}
478
471
- // case for symlink
472
- if s, ok := file.(*files.Symlink); ok {
473
- sdata, err := unixfs.SymlinkData(s.Target)
474
- if err != nil {
475
- return err
476
- }
477
-
478
- dagnode := dag.NodeWithData(sdata)
479
- dagnode.SetCidBuilder(adder.CidBuilder)
480
- err = adder.dagService.Add(adder.ctx, dagnode)
481
- if err != nil {
482
- return err
483
- }
479
+func (adder *Adder) addSymlink(path string, l *files.Symlink) error {
480
+ sdata, err := unixfs.SymlinkData(l.Target)
481
+ if err != nil {
482
+ return err
483
+ }
484
485
- return adder.addNode(dagnode, path)
485
+ dagnode := dag.NodeWithData(sdata)
486
+ dagnode.SetCidBuilder(adder.CidBuilder)
487
+ err = adder.dagService.Add(adder.ctx, dagnode)
488
+ if err != nil {
489
+ return err
490
}
491
488
- // case for regular file
492
+ return adder.addNode(dagnode, path)
493
+}
494
+
495
+func (adder *Adder) addFile(path string, file files.File) error {
496
// if the progress flag was specified, wrap the file so that we can send
497
// progress updates to the client (over the output channel)
491
- reader, ok := file.(io.Reader)
492
- if !ok {
493
- return errors.New("file doesn't support reading")
494
- }
498
+ var reader io.Reader = file
499
if adder.Progress {
500
rdr := &progressReader{file: reader, path: path, out: adder.Out}
501
if fi, ok := file.(files.FileInfo); ok {
@@ -542,7 +546,7 @@ func (adder *Adder) addDir(path string, dir files.Directory) error {
546
log.Infof("%s is hidden, skipping", fpath)
547
continue
548
}
545
- err = adder.addFile(fpath, it.Node())
549
+ err = adder.addFileNode(fpath, it.Node())
550
if err != nil {
551
return err
552
}