refac(commands2/pin) loop
Brian Tiger Chow committed
Nov 6, 2014 at 04:14 UTC
86f0aac88c2144604b0e2a7adeeda89129f05024
1 file changed
+32
-13
core/commands2/pin.go
+32
-13
@@ -5,6 +5,8 @@ import (
5
"fmt"
6
7
cmds "github.com/jbenet/go-ipfs/commands"
8
+ "github.com/jbenet/go-ipfs/core"
9
+ "github.com/jbenet/go-ipfs/merkledag"
10
)
11
12
var pinCmd = &cmds.Command{
@@ -35,27 +37,17 @@ var pinCmd = &cmds.Command{
37
}
38
}*/
39
40
+ paths := make([]string, 0)
41
for _, arg := range req.Arguments() {
42
path, ok := arg.(string)
43
if !ok {
44
res.SetError(errors.New("cast error"), cmds.ErrNormal)
45
return
46
}
44
-
45
- dagnode, err := n.Resolver.ResolvePath(path)
46
- if err != nil {
47
- res.SetError(fmt.Errorf("pin error: %v", err), cmds.ErrNormal)
48
- return
49
- }
50
-
51
- err = n.Pinning.Pin(dagnode, recursive)
52
- if err != nil {
53
- res.SetError(fmt.Errorf("pin: %v", err), cmds.ErrNormal)
54
- return
55
- }
47
+ paths = append(paths, path)
48
}
49
58
- err := n.Pinning.Flush()
50
+ _, err := pin(n, paths, recursive)
51
if err != nil {
52
res.SetError(err, cmds.ErrNormal)
53
}
@@ -107,3 +99,30 @@ var unpinCmd = &cmds.Command{
99
// TODO: create some output to show what got unpinned
100
},
101
}
102
+
103
+func pin(n *core.IpfsNode, paths []string, recursive bool) ([]*merkledag.Node, error) {
104
+
105
+ dagnodes := make([]*merkledag.Node, 0)
106
+ for _, path := range paths {
107
+
108
+ dagnode, err := n.Resolver.ResolvePath(path)
109
+ if err != nil {
110
+ return nil, fmt.Errorf("pin error: %v", err)
111
+ }
112
+ dagnodes = append(dagnodes, dagnode)
113
+ }
114
+
115
+ for _, dagnode := range dagnodes {
116
+ err := n.Pinning.Pin(dagnode, recursive)
117
+ if err != nil {
118
+ return nil, fmt.Errorf("pin: %v", err)
119
+ }
120
+ }
121
+
122
+ err := n.Pinning.Flush()
123
+ if err != nil {
124
+ return nil, err
125
+ }
126
+
127
+ return dagnodes, nil
128
+}