@cryptotaxi247 / kubo / commits / 1fe28bc65

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 }