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 6fb74bc12..349ca6417 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 { diff --git a/core/commands/pubsub.go b/core/commands/pubsub.go index b99c1f432..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" @@ -268,11 +270,26 @@ 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{}, + 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{ @@ -315,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), }, }