fix pin command output
Jeromy committed
Jan 16, 2015 at 08:13 UTC
3601a93d173ca3952a6f873b7190fee354f3d25f
1 file changed
+58
-5
core/commands/pin.go
+58
-5
@@ -1,7 +1,9 @@
1
package commands
2
3
import (
4
+ "bytes"
5
"fmt"
6
+ "io"
7
8
cmds "github.com/jbenet/go-ipfs/commands"
9
"github.com/jbenet/go-ipfs/core"
@@ -21,6 +23,10 @@ var PinCmd = &cmds.Command{
23
},
24
}
25
26
+type PinOutput struct {
27
+ Pinned []u.Key
28
+}
29
+
30
var addPinCmd = &cmds.Command{
31
Helptext: cmds.HelpText{
32
Tagline: "Pins objects to local storage",
@@ -36,6 +42,7 @@ on disk.
42
Options: []cmds.Option{
43
cmds.BoolOption("recursive", "r", "Recursively pin the object linked to by the specified object(s)"),
44
},
45
+ Type: PinOutput{},
46
Run: func(req cmds.Request) (interface{}, error) {
47
n, err := req.Context().GetNode()
48
if err != nil {
@@ -51,13 +58,36 @@ on disk.
58
recursive = false
59
}
60
54
- _, err = pin(n, req.Arguments(), recursive)
61
+ nodes, err := pin(n, req.Arguments(), recursive)
62
if err != nil {
63
return nil, err
64
}
65
66
+ var added []u.Key
67
+ for _, node := range nodes {
68
+ k, err := node.Key()
69
+ if err != nil {
70
+ return nil, err
71
+ }
72
+ added = append(added, k)
73
+ }
74
+
75
// TODO: create some output to show what got pinned
60
- return nil, nil
76
+ return &PinOutput{added}, nil
77
+ },
78
+ Marshalers: cmds.MarshalerMap{
79
+ cmds.Text: func(res cmds.Response) (io.Reader, error) {
80
+ added, ok := res.Output().(*PinOutput)
81
+ if !ok {
82
+ return nil, u.ErrCast()
83
+ }
84
+
85
+ buf := new(bytes.Buffer)
86
+ for _, k := range added.Pinned {
87
+ fmt.Fprintf(buf, "Pinned %s\n", k)
88
+ }
89
+ return buf, nil
90
+ },
91
},
92
}
93
@@ -76,6 +106,7 @@ collected if needed.
106
Options: []cmds.Option{
107
cmds.BoolOption("recursive", "r", "Recursively unpin the object linked to by the specified object(s)"),
108
},
109
+ Type: PinOutput{},
110
Run: func(req cmds.Request) (interface{}, error) {
111
n, err := req.Context().GetNode()
112
if err != nil {
@@ -91,13 +122,35 @@ collected if needed.
122
recursive = false // default
123
}
124
94
- _, err = unpin(n, req.Arguments(), recursive)
125
+ nodes, err := unpin(n, req.Arguments(), recursive)
126
if err != nil {
127
return nil, err
128
}
129
99
- // TODO: create some output to show what got unpinned
100
- return nil, nil
130
+ var removed []u.Key
131
+ for _, node := range nodes {
132
+ k, err := node.Key()
133
+ if err != nil {
134
+ return nil, err
135
+ }
136
+ removed = append(removed, k)
137
+ }
138
+
139
+ return &PinOutput{removed}, nil
140
+ },
141
+ Marshalers: cmds.MarshalerMap{
142
+ cmds.Text: func(res cmds.Response) (io.Reader, error) {
143
+ added, ok := res.Output().(*PinOutput)
144
+ if !ok {
145
+ return nil, u.ErrCast()
146
+ }
147
+
148
+ buf := new(bytes.Buffer)
149
+ for _, k := range added.Pinned {
150
+ fmt.Fprintf(buf, "Unpinned %s\n", k)
151
+ }
152
+ return buf, nil
153
+ },
154
},
155
}
156