core/commands/pin: refactor listing all pins
License: MIT Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Christian Couder committed
Jan 17, 2016 at 22:01 UTC
d87ece14ceee5aee3488a4ee17c1c0e640ece996
1 file changed
+48
-44
core/commands/pin.go
+48
-44
@@ -217,60 +217,27 @@ Example:
217
}
218
}
219
220
+ var keys map[string]RefKeyObject
221
+
222
if len(req.Arguments()) > 0 {
223
if !typeStrFound {
224
typeStr = "all"
225
}
226
225
- keys, err := pinLsKeys(req.Arguments(), typeStr, req.Context(), n)
226
-
227
- if err != nil {
228
- res.SetError(err, cmds.ErrNormal)
229
- } else {
230
- res.SetOutput(&RefKeyList{Keys: keys})
227
+ keys, err = pinLsKeys(req.Arguments(), typeStr, req.Context(), n)
228
+ } else {
229
+ if !typeStrFound {
230
+ typeStr = "recursive"
231
}
232
233
- return
234
- }
235
-
236
- if !typeStrFound {
237
- typeStr = "recursive"
238
- }
239
-
240
- keys := make(map[string]RefKeyObject)
241
-
242
- AddToResultKeys := func(keyList []key.Key, typeStr string) {
243
- for _, k := range keyList {
244
- keys[k.B58String()] = RefKeyObject{
245
- Type: typeStr,
246
- }
247
- }
233
+ keys, err = pinLsAll(typeStr, req.Context(), n)
234
}
235
250
- if typeStr == "direct" || typeStr == "all" {
251
- AddToResultKeys(n.Pinning.DirectKeys(), "direct")
252
- }
253
- if typeStr == "indirect" || typeStr == "all" {
254
- ks := key.NewKeySet()
255
- for _, k := range n.Pinning.RecursiveKeys() {
256
- nd, err := n.DAG.Get(n.Context(), k)
257
- if err != nil {
258
- res.SetError(err, cmds.ErrNormal)
259
- return
260
- }
261
- err = dag.EnumerateChildren(n.Context(), n.DAG, nd, ks)
262
- if err != nil {
263
- res.SetError(err, cmds.ErrNormal)
264
- return
265
- }
266
- }
267
- AddToResultKeys(ks.Keys(), "indirect")
268
- }
269
- if typeStr == "recursive" || typeStr == "all" {
270
- AddToResultKeys(n.Pinning.RecursiveKeys(), "recursive")
236
+ if err != nil {
237
+ res.SetError(err, cmds.ErrNormal)
238
+ } else {
239
+ res.SetOutput(&RefKeyList{Keys: keys})
240
}
272
-
273
- res.SetOutput(&RefKeyList{Keys: keys})
241
},
242
Type: RefKeyList{},
243
Marshalers: cmds.MarshalerMap{
@@ -306,6 +273,7 @@ type RefKeyList struct {
273
}
274
275
func pinLsKeys(args []string, typeStr string, ctx context.Context, n *core.IpfsNode) (map[string]RefKeyObject, error) {
276
+
277
keys := make(map[string]RefKeyObject)
278
279
for _, p := range args {
@@ -340,3 +308,39 @@ func pinLsKeys(args []string, typeStr string, ctx context.Context, n *core.IpfsN
308
309
return keys, nil
310
}
311
+
312
+func pinLsAll(typeStr string, ctx context.Context, n *core.IpfsNode) (map[string]RefKeyObject, error) {
313
+
314
+ keys := make(map[string]RefKeyObject)
315
+
316
+ AddToResultKeys := func(keyList []key.Key, typeStr string) {
317
+ for _, k := range keyList {
318
+ keys[k.B58String()] = RefKeyObject{
319
+ Type: typeStr,
320
+ }
321
+ }
322
+ }
323
+
324
+ if typeStr == "direct" || typeStr == "all" {
325
+ AddToResultKeys(n.Pinning.DirectKeys(), "direct")
326
+ }
327
+ if typeStr == "indirect" || typeStr == "all" {
328
+ ks := key.NewKeySet()
329
+ for _, k := range n.Pinning.RecursiveKeys() {
330
+ nd, err := n.DAG.Get(ctx, k)
331
+ if err != nil {
332
+ return nil, err
333
+ }
334
+ err = dag.EnumerateChildren(n.Context(), n.DAG, nd, ks)
335
+ if err != nil {
336
+ return nil, err
337
+ }
338
+ }
339
+ AddToResultKeys(ks.Keys(), "indirect")
340
+ }
341
+ if typeStr == "recursive" || typeStr == "all" {
342
+ AddToResultKeys(n.Pinning.RecursiveKeys(), "recursive")
343
+ }
344
+
345
+ return keys, nil
346
+}