@cryptotaxi247 / kubo / commits / bde95077c

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,