extract unpin
@mappum
Brian Tiger Chow committed
Nov 6, 2014 at 04:41 UTC
440c90be2490af0b6754eb19a089f7f896fd8286
1 file changed
+33
-23
core/commands2/pin.go
+33
-23
@@ -1,11 +1,11 @@
1
package commands
2
3
import (
4
- "errors"
4
"fmt"
5
6
cmds "github.com/jbenet/go-ipfs/commands"
7
"github.com/jbenet/go-ipfs/core"
8
+ "github.com/jbenet/go-ipfs/core/commands2/internal"
9
"github.com/jbenet/go-ipfs/merkledag"
10
)
11
@@ -37,7 +37,7 @@ var pinCmd = &cmds.Command{
37
}
38
}*/
39
40
- paths, err := toStrings(req.Arguments())
40
+ paths, err := internal.ToStrings(req.Arguments())
41
if err != nil {
42
res.SetError(err, cmds.ErrNormal)
43
return
@@ -66,28 +66,13 @@ var unpinCmd = &cmds.Command{
66
opt, _ := req.Option("recursive")
67
recursive, _ := opt.(bool) // false if cast fails.
68
69
- for _, arg := range req.Arguments() {
70
- path, ok := arg.(string)
71
- if !ok {
72
- res.SetError(errors.New("cast error"), cmds.ErrNormal)
73
- return
74
- }
75
-
76
- dagnode, err := n.Resolver.ResolvePath(path)
77
- if err != nil {
78
- res.SetError(fmt.Errorf("pin error: %v", err), cmds.ErrNormal)
79
- return
80
- }
81
-
82
- k, _ := dagnode.Key()
83
- err = n.Pinning.Unpin(k, recursive)
84
- if err != nil {
85
- res.SetError(fmt.Errorf("pin: %v", err), cmds.ErrNormal)
86
- return
87
- }
69
+ paths, err := internal.ToStrings(req.Arguments())
70
+ if err != nil {
71
+ res.SetError(err, cmds.ErrNormal)
72
+ return
73
}
74
90
- err := n.Pinning.Flush()
75
+ _, err = unpin(n, paths, recursive)
76
if err != nil {
77
res.SetError(err, cmds.ErrNormal)
78
}
@@ -100,7 +85,6 @@ func pin(n *core.IpfsNode, paths []string, recursive bool) ([]*merkledag.Node, e
85
86
dagnodes := make([]*merkledag.Node, 0)
87
for _, path := range paths {
103
-
88
dagnode, err := n.Resolver.ResolvePath(path)
89
if err != nil {
90
return nil, fmt.Errorf("pin error: %v", err)
@@ -122,3 +106,29 @@ func pin(n *core.IpfsNode, paths []string, recursive bool) ([]*merkledag.Node, e
106
107
return dagnodes, nil
108
}
109
+
110
+func unpin(n *core.IpfsNode, paths []string, recursive bool) ([]*merkledag.Node, error) {
111
+
112
+ dagnodes := make([]*merkledag.Node, 0)
113
+ for _, path := range paths {
114
+ dagnode, err := n.Resolver.ResolvePath(path)
115
+ if err != nil {
116
+ return nil, err
117
+ }
118
+ dagnodes = append(dagnodes, dagnode)
119
+ }
120
+
121
+ for _, dagnode := range dagnodes {
122
+ k, _ := dagnode.Key()
123
+ err := n.Pinning.Unpin(k, recursive)
124
+ if err != nil {
125
+ return nil, err
126
+ }
127
+ }
128
+
129
+ err := n.Pinning.Flush()
130
+ if err != nil {
131
+ return nil, err
132
+ }
133
+ return dagnodes, nil
134
+}