@cryptotaxi247 / kubo / commits / 109af0139

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