From 7d6de7ec967f1cb26a15440d261baf81c8f97cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Wed, 28 Nov 2018 00:09:13 +0100 Subject: [PATCH] namecache: update name follow to new cmd lib MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit License: MIT Signed-off-by: Ɓukasz Magiera --- core/commands/{ => name}/follow.go | 98 ++++++++++++------------------ namecache/namecache.go | 8 +-- 2 files changed, 42 insertions(+), 64 deletions(-) rename core/commands/{ => name}/follow.go (50%) diff --git a/core/commands/follow.go b/core/commands/name/follow.go similarity index 50% rename from core/commands/follow.go rename to core/commands/name/follow.go index 582f99af6..95d699648 100644 --- a/core/commands/follow.go +++ b/core/commands/name/follow.go @@ -1,15 +1,14 @@ -package commands +package name import ( - "errors" + "fmt" "io" - "strings" "time" - cmds "github.com/ipfs/go-ipfs/commands" - e "github.com/ipfs/go-ipfs/core/commands/e" + "github.com/ipfs/go-ipfs/core/commands/cmdenv" nc "github.com/ipfs/go-ipfs/namecache" + "gx/ipfs/QmR77mMvvh8mJBBWQmBfQBu8oD38NUN4KE9SL2gDgAQNc6/go-ipfs-cmds" "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" ) @@ -46,48 +45,39 @@ Follows an IPNS name by periodically resolving in the backround. cmdkit.StringOption("refresh-interval", "Follow refresh interval; defaults to 1hr."), }, - Run: func(req cmds.Request, res cmds.Response) { - n, err := req.InvocContext().GetNode() + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + n, err := cmdenv.GetNode(env) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } if n.Namecache == nil { - res.SetError(errors.New("IPNS Namecache is not available"), cmdkit.ErrClient) - return - } - - pin, _, _ := req.Option("pin").Bool() - - refrS, _, err := req.Option("refresh-interval").String() - if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return cmdkit.Errorf(cmdkit.ErrClient, "IPNS Namecache is not available") } + pin, _ := req.Options["pin"].(bool) + refrS, _ := req.Options["refresh-interval"].(string) refr := nc.DefaultFollowInterval + if refrS != "" { refr, err = time.ParseDuration(refrS) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } } - for _, name := range req.Arguments() { + for _, name := range req.Arguments { err = n.Namecache.Follow(name, pin, refr) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } } - res.SetOutput(&ipnsFollowResult{"ok"}) + return cmds.EmitOnce(res, &ipnsFollowResult{"ok"}) }, Type: ipnsFollowResult{}, - Marshalers: cmds.MarshalerMap{ - cmds.Text: marshalFollowResult, + Encoders: cmds.EncoderMap{ + cmds.Text: encodeFollowResult(), }, } @@ -95,23 +85,21 @@ var ipnsFollowListCmd = &cmds.Command{ Helptext: cmdkit.HelpText{ Tagline: "List names followed by the daemon", }, - Run: func(req cmds.Request, res cmds.Response) { - n, err := req.InvocContext().GetNode() + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + n, err := cmdenv.GetNode(env) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } if n.Namecache == nil { - res.SetError(errors.New("IPNS Namecache is not available"), cmdkit.ErrClient) - return + return cmdkit.Errorf(cmdkit.ErrClient, "IPNS Namecache is not available") } - res.SetOutput(&stringList{n.Namecache.ListFollows()}) + return cmds.EmitOnce(res, &stringList{n.Namecache.ListFollows()}) }, Type: stringList{}, - Marshalers: cmds.MarshalerMap{ - cmds.Text: stringListMarshaler, + Encoders: cmds.EncoderMap{ + cmds.Text: stringListEncoder(), }, } @@ -122,44 +110,34 @@ var ipnsFollowCancelCmd = &cmds.Command{ Arguments: []cmdkit.Argument{ cmdkit.StringArg("name", true, true, "Name follow to cancel."), }, - Run: func(req cmds.Request, res cmds.Response) { - n, err := req.InvocContext().GetNode() + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + n, err := cmdenv.GetNode(env) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } if n.Namecache == nil { - res.SetError(errors.New("IPNS Namecache is not available"), cmdkit.ErrClient) - return + return cmdkit.Errorf(cmdkit.ErrClient, "IPNS Namecache is not available") } - for _, name := range req.Arguments() { + for _, name := range req.Arguments { err = n.Namecache.Unfollow(name) if err != nil { - res.SetError(err, cmdkit.ErrNormal) - return + return err } } - res.SetOutput(&ipnsFollowResult{"ok"}) + return cmds.EmitOnce(res, &ipnsFollowResult{"ok"}) }, Type: ipnsFollowResult{}, - Marshalers: cmds.MarshalerMap{ - cmds.Text: marshalFollowResult, + Encoders: cmds.EncoderMap{ + cmds.Text: encodeFollowResult(), }, } -func marshalFollowResult(res cmds.Response) (io.Reader, error) { - v, err := unwrapOutput(res.Output()) - if err != nil { - return nil, err - } - - output, ok := v.(*ipnsFollowResult) - if !ok { - return nil, e.TypeErr(output, v) - } - - return strings.NewReader(output.Result + "\n"), nil +func encodeFollowResult() cmds.EncoderFunc { + return cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, list *ipnsFollowResult) error { + _, err := fmt.Fprintf(w, "%s\n", list.Result) + return err + }) } diff --git a/namecache/namecache.go b/namecache/namecache.go index 517bef0be..e130f20b6 100644 --- a/namecache/namecache.go +++ b/namecache/namecache.go @@ -11,12 +11,12 @@ import ( namesys "github.com/ipfs/go-ipfs/namesys" pin "github.com/ipfs/go-ipfs/pin" + uio "gx/ipfs/QmQ1JnYpnzkaurjW1yxkQxC2w3K1PorNE1nv1vaP5Le7sq/go-unixfs/io" cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid" + ipld "gx/ipfs/QmRL22E4paat7ky7vx9MLpR97JHHbFPrg3ytFQw6qp1y1s/go-ipld-format" bstore "gx/ipfs/QmS2aqUZLJp8kF1ihE5rvDGE5LvmKDPnx32w9Z1BW9xLV5/go-ipfs-blockstore" - uio "gx/ipfs/QmUnHNqhSB1JgzVCxL1Kz3yb4bdyB4q1Z9AD5AUBVmt3fZ/go-unixfs/io" - path "gx/ipfs/QmVi2uUygezqaMTqs3Yzt5FcZFHJoYD4B7jQ2BELjj7ZuY/go-path" - resolver "gx/ipfs/QmVi2uUygezqaMTqs3Yzt5FcZFHJoYD4B7jQ2BELjj7ZuY/go-path/resolver" - ipld "gx/ipfs/QmcKKBwfz6FyQdHR2jsXrrF6XeSBXYL86anmWNewpFpoF5/go-ipld-format" + path "gx/ipfs/QmWqh9oob7ZHQRwU5CdTqpnC8ip8BEkFNrwXRxeNo5Y7vA/go-path" + resolver "gx/ipfs/QmWqh9oob7ZHQRwU5CdTqpnC8ip8BEkFNrwXRxeNo5Y7vA/go-path/resolver" logging "gx/ipfs/QmcuXC5cxs79ro2cUuHs4HQ2bkDLJUYokwL8aivcX6HW3C/go-log" )