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),