From 59178057a2d8ed5e01f24578481b8ba92ed9c0ac Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Fri, 16 Mar 2018 10:17:34 +0100 Subject: [PATCH 1/3] fix: use EmitOnce where only single response is to be sent Part of #4818 License: MIT Signed-off-by: Jakub Sztandera --- core/commands/commands.go | 2 +- core/commands/files.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/commands/commands.go b/core/commands/commands.go index 0d2579f8f..46f5da1a4 100644 --- a/core/commands/commands.go +++ b/core/commands/commands.go @@ -71,7 +71,7 @@ func CommandsCmd(root *cmds.Command) *cmds.Command { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) { rootCmd := cmd2outputCmd("ipfs", root) rootCmd.showOpts, _ = req.Options[flagsOptionName].(bool) - err := res.Emit(&rootCmd) + err := cmds.EmitOnce(res, &rootCmd) if err != nil { log.Error(err) } diff --git a/core/commands/files.go b/core/commands/files.go index c07d199fe..36586f0f3 100644 --- a/core/commands/files.go +++ b/core/commands/files.go @@ -151,7 +151,7 @@ var filesStatCmd = &cmds.Command{ } if !withLocal { - res.Emit(o) + cmds.EmitOnce(res, o) return } @@ -161,7 +161,7 @@ var filesStatCmd = &cmds.Command{ o.Local = local o.SizeLocal = sizeLocal - res.Emit(o) + cmds.EmitOnce(res, o) }, Encoders: cmds.EncoderMap{ cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error { From 42d1aa5bf746ffed715d132f8776b46d11869c42 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Fri, 16 Mar 2018 14:01:37 +0100 Subject: [PATCH 2/3] cmd/pubsub: fix `pubsub ls` emiting plain strings instead of JSON License: MIT Signed-off-by: Jakub Sztandera --- core/commands/pubsub.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/commands/pubsub.go b/core/commands/pubsub.go index b99c1f432..e278e0f96 100644 --- a/core/commands/pubsub.go +++ b/core/commands/pubsub.go @@ -268,11 +268,9 @@ To use, the daemon must be run with '--enable-pubsub-experiment'. return } - for _, topic := range n.Floodsub.GetTopics() { - res.Emit(topic) - } + cmds.EmitOnce(res, stringList{n.Floodsub.GetTopics()}) }, - Type: "", + Type: stringList{}, } var PubsubPeersCmd = &cmds.Command{ From ead64854e65b3324822a9ab01b9fa43ec6710c3c Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Fri, 16 Mar 2018 14:53:36 +0100 Subject: [PATCH 3/3] cmd/pubsub: fix pubsub peers format brakage License: MIT Signed-off-by: Jakub Sztandera --- core/commands/pubsub.go | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/core/commands/pubsub.go b/core/commands/pubsub.go index e278e0f96..0b50c42cd 100644 --- a/core/commands/pubsub.go +++ b/core/commands/pubsub.go @@ -6,10 +6,12 @@ import ( "fmt" "io" "net/http" + "sort" "sync" "time" core "github.com/ipfs/go-ipfs/core" + e "github.com/ipfs/go-ipfs/core/commands/e" floodsub "gx/ipfs/QmSFihvoND3eDaAYRCeLgLPt62yCPgMZs1NSZmKFEtJQQw/go-libp2p-floodsub" pstore "gx/ipfs/QmXauCuJzmzapetmC6W4TuDJLL1yFFrVzSHoWv8YdbmnxH/go-libp2p-peerstore" @@ -271,6 +273,23 @@ To use, the daemon must be run with '--enable-pubsub-experiment'. cmds.EmitOnce(res, stringList{n.Floodsub.GetTopics()}) }, Type: stringList{}, + Encoders: cmds.EncoderMap{ + cmds.Text: cmds.MakeEncoder(stringListEncoder), + }, +} + +func stringListEncoder(req *cmds.Request, w io.Writer, v interface{}) error { + list, ok := v.(*stringList) + if !ok { + return e.TypeErr(list, v) + } + for _, str := range list.Strings { + _, err := fmt.Fprintf(w, "%s\n", str) + if err != nil { + return err + } + } + return nil } var PubsubPeersCmd = &cmds.Command{ @@ -313,12 +332,17 @@ To use, the daemon must be run with '--enable-pubsub-experiment'. topic = req.Arguments[0] } - for _, peer := range n.Floodsub.ListPeers(topic) { - res.Emit(peer.Pretty()) + peers := n.Floodsub.ListPeers(topic) + list := &stringList{make([]string, 0, len(peers))} + + for _, peer := range peers { + list.Strings = append(list.Strings, peer.Pretty()) } + sort.Strings(list.Strings) + cmds.EmitOnce(res, list) }, - Type: "", + Type: stringList{}, Encoders: cmds.EncoderMap{ - cmds.Text: cmds.Encoders[cmds.TextNewline], + cmds.Text: cmds.MakeEncoder(stringListEncoder), }, }