@cryptotaxi247 / kubo / commits / e096060b9

refactor(core/commands2/add) split loop

@mappum

Brian Tiger Chow committed Nov 6, 2014 at 03:25 UTC e096060b9049441b076246ee71a0f8bb313fc658
1 file changed +42 -25
core/commands2/add.go
+42 -25
@@ -1,12 +1,13 @@
1 package commands
2
3 import (
4 + "errors"
5 "fmt"
6 "io"
7
8 cmds "github.com/jbenet/go-ipfs/commands"
8 - "github.com/jbenet/go-ipfs/core"
9 - "github.com/jbenet/go-ipfs/importer"
9 + core "github.com/jbenet/go-ipfs/core"
10 + importer "github.com/jbenet/go-ipfs/importer"
11 dag "github.com/jbenet/go-ipfs/merkledag"
12 )
13
@@ -33,24 +34,31 @@ var addCmd = &cmds.Command{
34 // if r, _ := opt.(bool); found && r {
35 // }
36
36 - added := make([]Object, len(req.Arguments()))
37 -
38 - // add every path in args
39 - for i, arg := range req.Arguments() {
40 - // Add the file
41 - node, err := add(n, arg.(io.Reader))
42 - if err != nil {
43 - res.SetError(err, cmds.ErrNormal)
37 + readers := make([]io.Reader, 0)
38 + for _, arg := range req.Arguments() {
39 + reader, ok := arg.(io.Reader)
40 + if !ok {
41 + res.SetError(errors.New("cast error"), cmds.ErrNormal)
42 return
43 }
44 + readers = append(readers, reader)
45 + }
46
47 - k, err := node.Key()
47 + dagnodes, err := add(n, readers)
48 + if err != nil {
49 + res.SetError(errors.New("cast error"), cmds.ErrNormal)
50 + return
51 + }
52 +
53 + added := make([]Object, len(req.Arguments()))
54 + for _, dagnode := range dagnodes {
55 +
56 + k, err := dagnode.Key()
57 if err != nil {
58 res.SetError(err, cmds.ErrNormal)
59 return
60 }
52 -
53 - added[i] = Object{k.String(), nil}
61 + added = append(added, Object{Hash: k.String(), Links: nil})
62 }
63
64 res.SetOutput(&AddOutput{added})
@@ -73,18 +81,27 @@ var addCmd = &cmds.Command{
81 Type: &AddOutput{},
82 }
83
76 -func add(n *core.IpfsNode, in io.Reader) (*dag.Node, error) {
77 - node, err := importer.NewDagFromReader(in)
78 - if err != nil {
79 - return nil, err
80 - }
84 +func add(n *core.IpfsNode, readers []io.Reader) ([]*dag.Node, error) {
85
82 - // add the file to the graph + local storage
83 - err = n.DAG.AddRecursive(node)
84 - if err != nil {
85 - return nil, err
86 - }
86 + dagnodes := make([]*dag.Node, 0)
87
88 - // ensure we keep it
89 - return node, n.Pinning.Pin(node, true)
88 + for _, reader := range readers {
89 + node, err := importer.NewDagFromReader(reader)
90 + if err != nil {
91 + return nil, err
92 + }
93 +
94 + err = n.DAG.AddRecursive(node) // add the file to the graph + local storage
95 + if err != nil {
96 + return nil, err
97 + }
98 +
99 + err = n.Pinning.Pin(node, true) // ensure we keep it
100 + if err != nil {
101 + return nil, err
102 + }
103 +
104 + dagnodes = append(dagnodes, node)
105 + }
106 + return dagnodes, nil
107 }