commands/boostrap: use new cmds
License: MIT Signed-off-by: Overbool <overbool.xu@gmail.com>
Overbool committed
Oct 27, 2018 at 14:26 UTC
bde95077c7e0175558fc92f11eebb59f8a07c947
2 files changed
+72
-164
core/commands/bootstrap.go
+71
-163
@@ -1,16 +1,15 @@
1
package commands
2
3
import (
4
- "bytes"
4
"errors"
5
"io"
6
"sort"
7
9
- cmds "github.com/ipfs/go-ipfs/commands"
10
- e "github.com/ipfs/go-ipfs/core/commands/e"
8
+ oldcmds "github.com/ipfs/go-ipfs/commands"
9
repo "github.com/ipfs/go-ipfs/repo"
12
- "github.com/ipfs/go-ipfs/repo/fsrepo"
10
+ fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
11
12
+ cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds"
13
config "gx/ipfs/QmbK4EmM2Xx5fmbqK38TGP3PpY66r3tkXLZTcc7dF9mFwM/go-ipfs-config"
14
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
15
)
@@ -29,9 +28,9 @@ Running 'ipfs bootstrap' with no arguments will run 'ipfs bootstrap list'.
28
` + bootstrapSecurityWarning,
29
},
30
32
- Run: bootstrapListCmd.Run,
33
- Marshalers: bootstrapListCmd.Marshalers,
34
- Type: bootstrapListCmd.Type,
31
+ Run: bootstrapListCmd.Run,
32
+ Encoders: bootstrapListCmd.Encoders,
33
+ Type: bootstrapListCmd.Type,
34
35
Subcommands: map[string]*cmds.Command{
36
"list": bootstrapListCmd,
@@ -63,78 +62,54 @@ in the bootstrap list).
62
"default": bootstrapAddDefaultCmd,
63
},
64
66
- Run: func(req cmds.Request, res cmds.Response) {
67
- deflt, _, err := req.Option(defaultOptionName).Bool()
68
- if err != nil {
69
- res.SetError(err, cmdkit.ErrNormal)
70
- return
71
- }
65
+ Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
66
+ deflt, _ := req.Options[defaultOptionName].(bool)
67
68
var inputPeers []config.BootstrapPeer
69
if deflt {
70
// parse separately for meaningful, correct error.
71
defltPeers, err := config.DefaultBootstrapPeers()
72
if err != nil {
78
- res.SetError(err, cmdkit.ErrNormal)
79
- return
73
+ return err
74
}
75
76
inputPeers = defltPeers
77
} else {
84
- parsedPeers, err := config.ParseBootstrapPeers(req.Arguments())
78
+ parsedPeers, err := config.ParseBootstrapPeers(req.Arguments)
79
if err != nil {
86
- res.SetError(err, cmdkit.ErrNormal)
87
- return
80
+ return err
81
}
82
83
inputPeers = parsedPeers
84
}
85
86
if len(inputPeers) == 0 {
94
- res.SetError(errors.New("no bootstrap peers to add"), cmdkit.ErrClient)
95
- return
87
+ return errors.New("no bootstrap peers to add")
88
}
89
98
- r, err := fsrepo.Open(req.InvocContext().ConfigRoot)
90
+ ctx := env.(*oldcmds.Context)
91
+ r, err := fsrepo.Open(ctx.ConfigRoot)
92
if err != nil {
100
- res.SetError(err, cmdkit.ErrNormal)
101
- return
93
+ return err
94
}
95
defer r.Close()
96
cfg, err := r.Config()
97
if err != nil {
106
- res.SetError(err, cmdkit.ErrNormal)
107
- return
98
+ return err
99
}
100
101
added, err := bootstrapAdd(r, cfg, inputPeers)
102
if err != nil {
112
- res.SetError(err, cmdkit.ErrNormal)
113
- return
103
+ return err
104
}
105
116
- res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(added)})
106
+ return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(added)})
107
},
108
Type: BootstrapOutput{},
119
- Marshalers: cmds.MarshalerMap{
120
- cmds.Text: func(res cmds.Response) (io.Reader, error) {
121
- v, err := unwrapOutput(res.Output())
122
- if err != nil {
123
- return nil, err
124
- }
125
-
126
- out, ok := v.(*BootstrapOutput)
127
- if !ok {
128
- return nil, e.TypeErr(out, v)
129
- }
130
-
131
- buf := new(bytes.Buffer)
132
- if err := bootstrapWritePeers(buf, "added ", out.Peers); err != nil {
133
- return nil, err
134
- }
135
-
136
- return buf, nil
137
- },
109
+ Encoders: cmds.EncoderMap{
110
+ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
111
+ return bootstrapWritePeers(w, "added ", out.Peers)
112
+ }),
113
},
114
}
115
@@ -144,54 +119,36 @@ var bootstrapAddDefaultCmd = &cmds.Command{
119
ShortDescription: `Outputs a list of peers that were added (that weren't already
120
in the bootstrap list).`,
121
},
147
- Run: func(req cmds.Request, res cmds.Response) {
122
+ Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
123
defltPeers, err := config.DefaultBootstrapPeers()
124
if err != nil {
150
- res.SetError(err, cmdkit.ErrNormal)
151
- return
125
+ return err
126
}
127
154
- r, err := fsrepo.Open(req.InvocContext().ConfigRoot)
128
+ ctx := env.(*oldcmds.Context)
129
+ r, err := fsrepo.Open(ctx.ConfigRoot)
130
if err != nil {
156
- res.SetError(err, cmdkit.ErrNormal)
157
- return
131
+ return err
132
}
133
134
defer r.Close()
135
cfg, err := r.Config()
136
if err != nil {
163
- res.SetError(err, cmdkit.ErrNormal)
164
- return
137
+ return err
138
}
139
140
added, err := bootstrapAdd(r, cfg, defltPeers)
141
if err != nil {
169
- res.SetError(err, cmdkit.ErrNormal)
170
- return
142
+ return err
143
}
144
173
- res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(added)})
145
+ return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(added)})
146
},
147
Type: BootstrapOutput{},
176
- Marshalers: cmds.MarshalerMap{
177
- cmds.Text: func(res cmds.Response) (io.Reader, error) {
178
- v, err := unwrapOutput(res.Output())
179
- if err != nil {
180
- return nil, err
181
- }
182
-
183
- out, ok := v.(*BootstrapOutput)
184
- if !ok {
185
- return nil, e.TypeErr(out, v)
186
- }
187
-
188
- buf := new(bytes.Buffer)
189
- if err := bootstrapWritePeers(buf, "added ", out.Peers); err != nil {
190
- return nil, err
191
- }
192
-
193
- return buf, nil
194
- },
148
+ Encoders: cmds.EncoderMap{
149
+ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
150
+ return bootstrapWritePeers(w, "added ", out.Peers)
151
+ }),
152
},
153
}
154
@@ -215,61 +172,42 @@ var bootstrapRemoveCmd = &cmds.Command{
172
Subcommands: map[string]*cmds.Command{
173
"all": bootstrapRemoveAllCmd,
174
},
218
- Run: func(req cmds.Request, res cmds.Response) {
219
- all, _, err := req.Option(bootstrapAllOptionName).Bool()
220
- if err != nil {
221
- res.SetError(err, cmdkit.ErrNormal)
222
- return
223
- }
175
+ Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
176
+ all, _ := req.Options[bootstrapAllOptionName].(bool)
177
225
- r, err := fsrepo.Open(req.InvocContext().ConfigRoot)
178
+ ctx := env.(*oldcmds.Context)
179
+ r, err := fsrepo.Open(ctx.ConfigRoot)
180
if err != nil {
227
- res.SetError(err, cmdkit.ErrNormal)
228
- return
181
+ return err
182
}
183
defer r.Close()
184
cfg, err := r.Config()
185
if err != nil {
233
- res.SetError(err, cmdkit.ErrNormal)
234
- return
186
+ return err
187
}
188
189
var removed []config.BootstrapPeer
190
if all {
191
removed, err = bootstrapRemoveAll(r, cfg)
192
} else {
241
- input, perr := config.ParseBootstrapPeers(req.Arguments())
193
+ input, perr := config.ParseBootstrapPeers(req.Arguments)
194
if perr != nil {
243
- res.SetError(perr, cmdkit.ErrNormal)
244
- return
195
+ return err
196
}
197
198
removed, err = bootstrapRemove(r, cfg, input)
199
}
200
if err != nil {
250
- res.SetError(err, cmdkit.ErrNormal)
251
- return
201
+ return err
202
}
203
254
- res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(removed)})
204
+ return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(removed)})
205
},
206
Type: BootstrapOutput{},
257
- Marshalers: cmds.MarshalerMap{
258
- cmds.Text: func(res cmds.Response) (io.Reader, error) {
259
- v, err := unwrapOutput(res.Output())
260
- if err != nil {
261
- return nil, err
262
- }
263
-
264
- out, ok := v.(*BootstrapOutput)
265
- if !ok {
266
- return nil, e.TypeErr(out, v)
267
- }
268
-
269
- buf := new(bytes.Buffer)
270
- err = bootstrapWritePeers(buf, "removed ", out.Peers)
271
- return buf, err
272
- },
207
+ Encoders: cmds.EncoderMap{
208
+ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
209
+ return bootstrapWritePeers(w, "removed ", out.Peers)
210
+ }),
211
},
212
}
213
@@ -279,44 +217,30 @@ var bootstrapRemoveAllCmd = &cmds.Command{
217
ShortDescription: `Outputs the list of peers that were removed.`,
218
},
219
282
- Run: func(req cmds.Request, res cmds.Response) {
283
- r, err := fsrepo.Open(req.InvocContext().ConfigRoot)
220
+ Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
221
+ ctx := env.(*oldcmds.Context)
222
+ r, err := fsrepo.Open(ctx.ConfigRoot)
223
if err != nil {
285
- res.SetError(err, cmdkit.ErrNormal)
286
- return
224
+ return err
225
}
226
defer r.Close()
227
cfg, err := r.Config()
228
if err != nil {
291
- res.SetError(err, cmdkit.ErrNormal)
292
- return
229
+ return err
230
}
231
232
removed, err := bootstrapRemoveAll(r, cfg)
233
if err != nil {
297
- res.SetError(err, cmdkit.ErrNormal)
298
- return
234
+ return err
235
}
236
301
- res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(removed)})
237
+ return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(removed)})
238
},
239
Type: BootstrapOutput{},
304
- Marshalers: cmds.MarshalerMap{
305
- cmds.Text: func(res cmds.Response) (io.Reader, error) {
306
- v, err := unwrapOutput(res.Output())
307
- if err != nil {
308
- return nil, err
309
- }
310
-
311
- out, ok := v.(*BootstrapOutput)
312
- if !ok {
313
- return nil, e.TypeErr(out, v)
314
- }
315
-
316
- buf := new(bytes.Buffer)
317
- err = bootstrapWritePeers(buf, "removed ", out.Peers)
318
- return buf, err
319
- },
240
+ Encoders: cmds.EncoderMap{
241
+ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
242
+ return bootstrapWritePeers(w, "removed ", out.Peers)
243
+ }),
244
},
245
}
246
@@ -326,50 +250,34 @@ var bootstrapListCmd = &cmds.Command{
250
ShortDescription: "Peers are output in the format '<multiaddr>/<peerID>'.",
251
},
252
329
- Run: func(req cmds.Request, res cmds.Response) {
330
- r, err := fsrepo.Open(req.InvocContext().ConfigRoot)
253
+ Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
254
+ ctx := env.(*oldcmds.Context)
255
+ r, err := fsrepo.Open(ctx.ConfigRoot)
256
if err != nil {
332
- res.SetError(err, cmdkit.ErrNormal)
333
- return
257
+ return err
258
}
259
defer r.Close()
260
cfg, err := r.Config()
261
if err != nil {
338
- res.SetError(err, cmdkit.ErrNormal)
339
- return
262
+ return err
263
}
264
265
peers, err := cfg.BootstrapPeers()
266
if err != nil {
344
- res.SetError(err, cmdkit.ErrNormal)
345
- return
267
+ return err
268
}
347
- res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(peers)})
269
+
270
+ return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(peers)})
271
},
272
Type: BootstrapOutput{},
350
- Marshalers: cmds.MarshalerMap{
351
- cmds.Text: bootstrapMarshaler,
273
+ Encoders: cmds.EncoderMap{
274
+ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
275
+ return bootstrapWritePeers(w, "", out.Peers)
276
+ }),
277
},
278
}
279
355
-func bootstrapMarshaler(res cmds.Response) (io.Reader, error) {
356
- v, err := unwrapOutput(res.Output())
357
- if err != nil {
358
- return nil, err
359
- }
360
-
361
- out, ok := v.(*BootstrapOutput)
362
- if !ok {
363
- return nil, e.TypeErr(out, v)
364
- }
365
-
366
- buf := new(bytes.Buffer)
367
- err = bootstrapWritePeers(buf, "", out.Peers)
368
- return buf, err
369
-}
370
-
280
func bootstrapWritePeers(w io.Writer, prefix string, peers []string) error {
372
-
281
sort.Stable(sort.StringSlice(peers))
282
for _, peer := range peers {
283
_, err := w.Write([]byte(prefix + peer + "\n"))
core/commands/root.go
+1
-1
@@ -122,7 +122,7 @@ var rootSubcommands = map[string]*cmds.Command{
122
"pubsub": PubsubCmd,
123
"repo": RepoCmd,
124
"stats": StatsCmd,
125
- "bootstrap": lgc.NewCommand(BootstrapCmd),
125
+ "bootstrap": BootstrapCmd,
126
"config": ConfigCmd,
127
"dag": dag.DagCmd,
128
"dht": DhtCmd,