@cryptotaxi247 / kubo / commits / e332af8ed

commands: fix a bunch of tiny commands-lib issues

* Always check errors returned by emit. Otherwise, we may not notice when the client goes away. * Make sure to use EmitOnce instead of Emit when appropriate. Otherwise, we break javascript. (thanks Magik6k for finding this before we cut the release...) License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>

Steven Allen committed Oct 30, 2018 at 06:43 UTC e332af8ed509a9485ebc506544d9f39ea4cd5fd5
6 files changed +19 -11
core/commands/dag/dag.go
+2 -2
@@ -188,7 +188,7 @@ format.
188 }
189 out = final
190 }
191 - return res.Emit(&out)
191 + return cmds.EmitOnce(res, &out)
192 },
193 }
194
@@ -219,7 +219,7 @@ var DagResolveCmd = &cmds.Command{
219 return err
220 }
221
222 - return res.Emit(&ResolveOutput{
222 + return cmds.EmitOnce(res, &ResolveOutput{
223 Cid: lastCid,
224 RemPath: path.Join(rem),
225 })
core/commands/dns.go
+1 -1
@@ -77,7 +77,7 @@ The resolver can recursively resolve:
77 if err != nil {
78 return err
79 }
80 - return res.Emit(&ncmd.ResolvedPath{Path: output})
80 + return cmds.EmitOnce(res, &ncmd.ResolvedPath{Path: output})
81 },
82 Encoders: cmds.EncoderMap{
83 cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *ncmd.ResolvedPath) error {
core/commands/pubsub.go
+4 -2
@@ -105,12 +105,14 @@ This command outputs data in the following encodings:
105 return err
106 }
107
108 - res.Emit(&pubsubMessage{
108 + if err := res.Emit(&pubsubMessage{
109 Data: msg.Data(),
110 From: []byte(msg.From()),
111 Seqno: msg.Seq(),
112 TopicIDs: msg.Topics(),
113 - })
113 + }); err != nil {
114 + return err
115 + }
116 }
117 },
118 Encoders: cmds.EncoderMap{
core/commands/stat.go
+10 -4
@@ -127,14 +127,20 @@ Example:
127 for {
128 if pfound {
129 stats := nd.Reporter.GetBandwidthForPeer(pid)
130 - res.Emit(&stats)
130 + if err := res.Emit(&stats); err != nil {
131 + return err
132 + }
133 } else if tfound {
134 protoId := protocol.ID(tstr)
135 stats := nd.Reporter.GetBandwidthForProtocol(protoId)
134 - res.Emit(&stats)
136 + if err := res.Emit(&stats); err != nil {
137 + return err
138 + }
139 } else {
140 totals := nd.Reporter.GetBandwidthTotals()
137 - res.Emit(&totals)
141 + if err := res.Emit(&totals); err != nil {
142 + return err
143 + }
144 }
145 if !doPoll {
146 return nil
@@ -142,7 +148,7 @@ Example:
148 select {
149 case <-time.After(interval):
150 case <-req.Context.Done():
145 - return nil
151 + return req.Context.Err()
152 }
153 }
154 },
core/commands/tar.go
+1 -1
@@ -57,7 +57,7 @@ represent it.
57 c := node.Cid()
58
59 fi.FileName()
60 - return res.Emit(&coreiface.AddEvent{
60 + return cmds.EmitOnce(res, &coreiface.AddEvent{
61 Name: fi.FileName(),
62 Hash: c.String(),
63 })
core/commands/version.go
+1 -1
@@ -40,7 +40,7 @@ var VersionCmd = &cmds.Command{
40 cmdkit.BoolOption(versionAllOptionName, "Show all version information"),
41 },
42 Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
43 - return res.Emit(&VersionOutput{
43 + return cmds.EmitOnce(res, &VersionOutput{
44 Version: version.CurrentVersionNumber,
45 Commit: version.CurrentCommit,
46 Repo: fmt.Sprint(fsrepo.RepoVersion),