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
}