提交 d87ece14 作者: Christian Couder

core/commands/pin: refactor listing all pins

License: MIT
Signed-off-by: 's avatarChristian Couder <chriscool@tuxfamily.org>
上级 4244f71d
...@@ -217,60 +217,27 @@ Example: ...@@ -217,60 +217,27 @@ Example:
} }
} }
var keys map[string]RefKeyObject
if len(req.Arguments()) > 0 { if len(req.Arguments()) > 0 {
if !typeStrFound { if !typeStrFound {
typeStr = "all" typeStr = "all"
} }
keys, err := pinLsKeys(req.Arguments(), typeStr, req.Context(), n) keys, err = pinLsKeys(req.Arguments(), typeStr, req.Context(), n)
} else {
if err != nil { if !typeStrFound {
res.SetError(err, cmds.ErrNormal) typeStr = "recursive"
} else {
res.SetOutput(&RefKeyList{Keys: keys})
} }
return keys, err = pinLsAll(typeStr, req.Context(), n)
}
if !typeStrFound {
typeStr = "recursive"
}
keys := make(map[string]RefKeyObject)
AddToResultKeys := func(keyList []key.Key, typeStr string) {
for _, k := range keyList {
keys[k.B58String()] = RefKeyObject{
Type: typeStr,
}
}
} }
if typeStr == "direct" || typeStr == "all" { if err != nil {
AddToResultKeys(n.Pinning.DirectKeys(), "direct") res.SetError(err, cmds.ErrNormal)
} } else {
if typeStr == "indirect" || typeStr == "all" { res.SetOutput(&RefKeyList{Keys: keys})
ks := key.NewKeySet()
for _, k := range n.Pinning.RecursiveKeys() {
nd, err := n.DAG.Get(n.Context(), k)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
err = dag.EnumerateChildren(n.Context(), n.DAG, nd, ks)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
}
AddToResultKeys(ks.Keys(), "indirect")
}
if typeStr == "recursive" || typeStr == "all" {
AddToResultKeys(n.Pinning.RecursiveKeys(), "recursive")
} }
res.SetOutput(&RefKeyList{Keys: keys})
}, },
Type: RefKeyList{}, Type: RefKeyList{},
Marshalers: cmds.MarshalerMap{ Marshalers: cmds.MarshalerMap{
...@@ -306,6 +273,7 @@ type RefKeyList struct { ...@@ -306,6 +273,7 @@ type RefKeyList struct {
} }
func pinLsKeys(args []string, typeStr string, ctx context.Context, n *core.IpfsNode) (map[string]RefKeyObject, error) { func pinLsKeys(args []string, typeStr string, ctx context.Context, n *core.IpfsNode) (map[string]RefKeyObject, error) {
keys := make(map[string]RefKeyObject) keys := make(map[string]RefKeyObject)
for _, p := range args { for _, p := range args {
...@@ -340,3 +308,39 @@ func pinLsKeys(args []string, typeStr string, ctx context.Context, n *core.IpfsN ...@@ -340,3 +308,39 @@ func pinLsKeys(args []string, typeStr string, ctx context.Context, n *core.IpfsN
return keys, nil return keys, nil
} }
func pinLsAll(typeStr string, ctx context.Context, n *core.IpfsNode) (map[string]RefKeyObject, error) {
keys := make(map[string]RefKeyObject)
AddToResultKeys := func(keyList []key.Key, typeStr string) {
for _, k := range keyList {
keys[k.B58String()] = RefKeyObject{
Type: typeStr,
}
}
}
if typeStr == "direct" || typeStr == "all" {
AddToResultKeys(n.Pinning.DirectKeys(), "direct")
}
if typeStr == "indirect" || typeStr == "all" {
ks := key.NewKeySet()
for _, k := range n.Pinning.RecursiveKeys() {
nd, err := n.DAG.Get(ctx, k)
if err != nil {
return nil, err
}
err = dag.EnumerateChildren(n.Context(), n.DAG, nd, ks)
if err != nil {
return nil, err
}
}
AddToResultKeys(ks.Keys(), "indirect")
}
if typeStr == "recursive" || typeStr == "all" {
AddToResultKeys(n.Pinning.RecursiveKeys(), "recursive")
}
return keys, nil
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论