core/commands2: Added 'pin' and 'unpin' commands
Matt Bell committed
Nov 4, 2014 at 23:45 UTC
109af013966464a1a36f4adb3fd43e6e8620e217
2 files changed
+111
core/commands2/pin.go
new
+109
@@ -0,0 +1,109 @@
1
+package commands
2
+
3
+import (
4
+ "errors"
5
+ "fmt"
6
+
7
+ cmds "github.com/jbenet/go-ipfs/commands"
8
+)
9
+
10
+var pinCmd = &cmds.Command{
11
+ Options: []cmds.Option{
12
+ cmds.Option{[]string{"recursive", "r"}, cmds.Bool},
13
+ cmds.Option{[]string{"depth", "d"}, cmds.Uint},
14
+ },
15
+ Arguments: []cmds.Argument{
16
+ cmds.Argument{"object", cmds.ArgString, true, true},
17
+ },
18
+ Run: func(res cmds.Response, req cmds.Request) {
19
+ n := req.Context().Node
20
+
21
+ // set recursive flag
22
+ opt, _ := req.Option("recursive")
23
+ recursive, _ := opt.(bool) // false if cast fails.
24
+
25
+ /*depth := 1 // default (non recursive)
26
+
27
+ // if recursive, set depth flag
28
+ if recursive {
29
+ opt, found := req.Option("depth")
30
+ if d, ok := opt.(int); found && ok {
31
+ depth = d
32
+ } else {
33
+ res.SetError(errors.New("cast error"), cmds.ErrNormal)
34
+ return
35
+ }
36
+ }*/
37
+
38
+ for _, arg := range req.Arguments() {
39
+ path, ok := arg.(string)
40
+ if !ok {
41
+ res.SetError(errors.New("cast error"), cmds.ErrNormal)
42
+ return
43
+ }
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
+ }
56
+ }
57
+
58
+ err := n.Pinning.Flush()
59
+ if err != nil {
60
+ res.SetError(err, cmds.ErrNormal)
61
+ }
62
+
63
+ // TODO: create some output to show what got pinned
64
+ },
65
+}
66
+
67
+var unpinCmd = &cmds.Command{
68
+ Options: []cmds.Option{
69
+ cmds.Option{[]string{"recursive", "r"}, cmds.Bool},
70
+ },
71
+ Arguments: []cmds.Argument{
72
+ cmds.Argument{"object", cmds.ArgString, true, true},
73
+ },
74
+ Run: func(res cmds.Response, req cmds.Request) {
75
+ n := req.Context().Node
76
+
77
+ // set recursive flag
78
+ opt, _ := req.Option("recursive")
79
+ recursive, _ := opt.(bool) // false if cast fails.
80
+
81
+ for _, arg := range req.Arguments() {
82
+ path, ok := arg.(string)
83
+ if !ok {
84
+ res.SetError(errors.New("cast error"), cmds.ErrNormal)
85
+ return
86
+ }
87
+
88
+ dagnode, err := n.Resolver.ResolvePath(path)
89
+ if err != nil {
90
+ res.SetError(fmt.Errorf("pin error: %v", err), cmds.ErrNormal)
91
+ return
92
+ }
93
+
94
+ k, _ := dagnode.Key()
95
+ err = n.Pinning.Unpin(k, recursive)
96
+ if err != nil {
97
+ res.SetError(fmt.Errorf("pin: %v", err), cmds.ErrNormal)
98
+ return
99
+ }
100
+ }
101
+
102
+ err := n.Pinning.Flush()
103
+ if err != nil {
104
+ res.SetError(err, cmds.ErrNormal)
105
+ }
106
+
107
+ // TODO: create some output to show what got unpinned
108
+ },
109
+}
core/commands2/root.go
+2
@@ -63,6 +63,8 @@ var rootSubcommands = map[string]*cmds.Command{
63
"add": addCmd,
64
"log": logCmd,
65
"diag": diagCmd,
66
+ "pin": pinCmd,
67
+ "unpin": unpinCmd,
68
69
// test subcommands
70
// TODO: remove these when we don't need them anymore