@cryptotaxi247 / kubo / commits / 86f0aac88

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 +}