提交 a7accecc 作者: Matt Bell 提交者: Juan Batiz-Benet

core/commands2: Moved 'resolve' and 'publish' into subcommands of 'name'

上级 bbca4452
...@@ -16,6 +16,18 @@ type IpnsEntry struct { ...@@ -16,6 +16,18 @@ type IpnsEntry struct {
Value string Value string
} }
type ResolveOutput struct {
Entries []IpnsEntry
}
var nameCmd = &cmds.Command{
Help: "TODO",
Subcommands: map[string]*cmds.Command{
"publish": publishCmd,
"resolve": resolveCmd,
},
}
var publishCmd = &cmds.Command{ var publishCmd = &cmds.Command{
Arguments: []cmds.Argument{ Arguments: []cmds.Argument{
cmds.Argument{"name", cmds.ArgString, false, false}, cmds.Argument{"name", cmds.ArgString, false, false},
...@@ -65,6 +77,56 @@ var publishCmd = &cmds.Command{ ...@@ -65,6 +77,56 @@ var publishCmd = &cmds.Command{
Type: &IpnsEntry{}, Type: &IpnsEntry{},
} }
var resolveCmd = &cmds.Command{
Arguments: []cmds.Argument{
cmds.Argument{"name", cmds.ArgString, false, true},
},
Run: func(res cmds.Response, req cmds.Request) {
name := ""
args := req.Arguments()
n := req.Context().Node
var output []IpnsEntry
if len(args) == 0 {
if n.Identity == nil {
res.SetError(errors.New("Identity not loaded!"), cmds.ErrNormal)
return
}
name = n.Identity.ID().String()
entry, err := resolve(name, n)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
output = []IpnsEntry{entry}
} else {
output = make([]IpnsEntry, len(args))
for i, arg := range args {
var ok bool
name, ok = arg.(string)
if !ok {
res.SetError(errors.New("cast error"), cmds.ErrNormal)
return
}
entry, err := resolve(name, n)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
output[i] = entry
}
}
res.SetOutput(&ResolveOutput{output})
},
Type: &ResolveOutput{},
}
func publish(n *core.IpfsNode, k crypto.PrivKey, ref string) (*IpnsEntry, error) { func publish(n *core.IpfsNode, k crypto.PrivKey, ref string) (*IpnsEntry, error) {
pub := nsys.NewRoutingPublisher(n.Routing) pub := nsys.NewRoutingPublisher(n.Routing)
err := pub.Publish(k, ref) err := pub.Publish(k, ref)
...@@ -82,3 +144,15 @@ func publish(n *core.IpfsNode, k crypto.PrivKey, ref string) (*IpnsEntry, error) ...@@ -82,3 +144,15 @@ func publish(n *core.IpfsNode, k crypto.PrivKey, ref string) (*IpnsEntry, error)
Value: ref, Value: ref,
}, nil }, nil
} }
func resolve(name string, n *core.IpfsNode) (IpnsEntry, error) {
resolved, err := n.Namesys.Resolve(name)
if err != nil {
return IpnsEntry{}, err
}
return IpnsEntry{
Name: name,
Value: resolved,
}, nil
}
package commands
import (
"errors"
cmds "github.com/jbenet/go-ipfs/commands"
"github.com/jbenet/go-ipfs/core"
)
type ResolveOutput struct {
Entries []IpnsEntry
}
var resolveCmd = &cmds.Command{
Arguments: []cmds.Argument{
cmds.Argument{"name", cmds.ArgString, false, true},
},
Run: func(res cmds.Response, req cmds.Request) {
name := ""
args := req.Arguments()
n := req.Context().Node
var output []IpnsEntry
if len(args) == 0 {
if n.Identity == nil {
res.SetError(errors.New("Identity not loaded!"), cmds.ErrNormal)
return
}
name = n.Identity.ID().String()
entry, err := resolve(name, n)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
output = []IpnsEntry{entry}
} else {
output = make([]IpnsEntry, len(args))
for i, arg := range args {
var ok bool
name, ok = arg.(string)
if !ok {
res.SetError(errors.New("cast error"), cmds.ErrNormal)
return
}
entry, err := resolve(name, n)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
output[i] = entry
}
}
res.SetOutput(&ResolveOutput{output})
},
Type: &ResolveOutput{},
}
func resolve(name string, n *core.IpfsNode) (IpnsEntry, error) {
resolved, err := n.Namesys.Resolve(name)
if err != nil {
return IpnsEntry{}, err
}
return IpnsEntry{
Name: name,
Value: resolved,
}, nil
}
...@@ -59,13 +59,12 @@ var rootSubcommands = map[string]*cmds.Command{ ...@@ -59,13 +59,12 @@ var rootSubcommands = map[string]*cmds.Command{
"cat": catCmd, "cat": catCmd,
"ls": lsCmd, "ls": lsCmd,
"commands": commandsCmd, "commands": commandsCmd,
"publish": publishCmd, "name": nameCmd,
"add": addCmd, "add": addCmd,
"log": logCmd, "log": logCmd,
"diag": diagCmd, "diag": diagCmd,
"pin": pinCmd, "pin": pinCmd,
"unpin": unpinCmd, "unpin": unpinCmd,
"resolve": resolveCmd,
// test subcommands // test subcommands
// TODO: remove these when we don't need them anymore // TODO: remove these when we don't need them anymore
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论