提交 bde95077 作者: Overbool

commands/boostrap: use new cmds

License: MIT
Signed-off-by: 's avatarOverbool <overbool.xu@gmail.com>
上级 887be024
package commands package commands
import ( import (
"bytes"
"errors" "errors"
"io" "io"
"sort" "sort"
cmds "github.com/ipfs/go-ipfs/commands" oldcmds "github.com/ipfs/go-ipfs/commands"
e "github.com/ipfs/go-ipfs/core/commands/e"
repo "github.com/ipfs/go-ipfs/repo" repo "github.com/ipfs/go-ipfs/repo"
"github.com/ipfs/go-ipfs/repo/fsrepo" fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds"
config "gx/ipfs/QmbK4EmM2Xx5fmbqK38TGP3PpY66r3tkXLZTcc7dF9mFwM/go-ipfs-config" config "gx/ipfs/QmbK4EmM2Xx5fmbqK38TGP3PpY66r3tkXLZTcc7dF9mFwM/go-ipfs-config"
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
) )
...@@ -29,9 +28,9 @@ Running 'ipfs bootstrap' with no arguments will run 'ipfs bootstrap list'. ...@@ -29,9 +28,9 @@ Running 'ipfs bootstrap' with no arguments will run 'ipfs bootstrap list'.
` + bootstrapSecurityWarning, ` + bootstrapSecurityWarning,
}, },
Run: bootstrapListCmd.Run, Run: bootstrapListCmd.Run,
Marshalers: bootstrapListCmd.Marshalers, Encoders: bootstrapListCmd.Encoders,
Type: bootstrapListCmd.Type, Type: bootstrapListCmd.Type,
Subcommands: map[string]*cmds.Command{ Subcommands: map[string]*cmds.Command{
"list": bootstrapListCmd, "list": bootstrapListCmd,
...@@ -63,78 +62,54 @@ in the bootstrap list). ...@@ -63,78 +62,54 @@ in the bootstrap list).
"default": bootstrapAddDefaultCmd, "default": bootstrapAddDefaultCmd,
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
deflt, _, err := req.Option(defaultOptionName).Bool() deflt, _ := req.Options[defaultOptionName].(bool)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
}
var inputPeers []config.BootstrapPeer var inputPeers []config.BootstrapPeer
if deflt { if deflt {
// parse separately for meaningful, correct error. // parse separately for meaningful, correct error.
defltPeers, err := config.DefaultBootstrapPeers() defltPeers, err := config.DefaultBootstrapPeers()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
inputPeers = defltPeers inputPeers = defltPeers
} else { } else {
parsedPeers, err := config.ParseBootstrapPeers(req.Arguments()) parsedPeers, err := config.ParseBootstrapPeers(req.Arguments)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
inputPeers = parsedPeers inputPeers = parsedPeers
} }
if len(inputPeers) == 0 { if len(inputPeers) == 0 {
res.SetError(errors.New("no bootstrap peers to add"), cmdkit.ErrClient) return errors.New("no bootstrap peers to add")
return
} }
r, err := fsrepo.Open(req.InvocContext().ConfigRoot) ctx := env.(*oldcmds.Context)
r, err := fsrepo.Open(ctx.ConfigRoot)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
defer r.Close() defer r.Close()
cfg, err := r.Config() cfg, err := r.Config()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
added, err := bootstrapAdd(r, cfg, inputPeers) added, err := bootstrapAdd(r, cfg, inputPeers)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(added)}) return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(added)})
}, },
Type: BootstrapOutput{}, Type: BootstrapOutput{},
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) { cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
v, err := unwrapOutput(res.Output()) return bootstrapWritePeers(w, "added ", out.Peers)
if err != nil { }),
return nil, err
}
out, ok := v.(*BootstrapOutput)
if !ok {
return nil, e.TypeErr(out, v)
}
buf := new(bytes.Buffer)
if err := bootstrapWritePeers(buf, "added ", out.Peers); err != nil {
return nil, err
}
return buf, nil
},
}, },
} }
...@@ -144,54 +119,36 @@ var bootstrapAddDefaultCmd = &cmds.Command{ ...@@ -144,54 +119,36 @@ var bootstrapAddDefaultCmd = &cmds.Command{
ShortDescription: `Outputs a list of peers that were added (that weren't already ShortDescription: `Outputs a list of peers that were added (that weren't already
in the bootstrap list).`, in the bootstrap list).`,
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
defltPeers, err := config.DefaultBootstrapPeers() defltPeers, err := config.DefaultBootstrapPeers()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
r, err := fsrepo.Open(req.InvocContext().ConfigRoot) ctx := env.(*oldcmds.Context)
r, err := fsrepo.Open(ctx.ConfigRoot)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
defer r.Close() defer r.Close()
cfg, err := r.Config() cfg, err := r.Config()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
added, err := bootstrapAdd(r, cfg, defltPeers) added, err := bootstrapAdd(r, cfg, defltPeers)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(added)}) return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(added)})
}, },
Type: BootstrapOutput{}, Type: BootstrapOutput{},
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) { cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
v, err := unwrapOutput(res.Output()) return bootstrapWritePeers(w, "added ", out.Peers)
if err != nil { }),
return nil, err
}
out, ok := v.(*BootstrapOutput)
if !ok {
return nil, e.TypeErr(out, v)
}
buf := new(bytes.Buffer)
if err := bootstrapWritePeers(buf, "added ", out.Peers); err != nil {
return nil, err
}
return buf, nil
},
}, },
} }
...@@ -215,61 +172,42 @@ var bootstrapRemoveCmd = &cmds.Command{ ...@@ -215,61 +172,42 @@ var bootstrapRemoveCmd = &cmds.Command{
Subcommands: map[string]*cmds.Command{ Subcommands: map[string]*cmds.Command{
"all": bootstrapRemoveAllCmd, "all": bootstrapRemoveAllCmd,
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
all, _, err := req.Option(bootstrapAllOptionName).Bool() all, _ := req.Options[bootstrapAllOptionName].(bool)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
}
r, err := fsrepo.Open(req.InvocContext().ConfigRoot) ctx := env.(*oldcmds.Context)
r, err := fsrepo.Open(ctx.ConfigRoot)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
defer r.Close() defer r.Close()
cfg, err := r.Config() cfg, err := r.Config()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
var removed []config.BootstrapPeer var removed []config.BootstrapPeer
if all { if all {
removed, err = bootstrapRemoveAll(r, cfg) removed, err = bootstrapRemoveAll(r, cfg)
} else { } else {
input, perr := config.ParseBootstrapPeers(req.Arguments()) input, perr := config.ParseBootstrapPeers(req.Arguments)
if perr != nil { if perr != nil {
res.SetError(perr, cmdkit.ErrNormal) return err
return
} }
removed, err = bootstrapRemove(r, cfg, input) removed, err = bootstrapRemove(r, cfg, input)
} }
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(removed)}) return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(removed)})
}, },
Type: BootstrapOutput{}, Type: BootstrapOutput{},
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) { cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
v, err := unwrapOutput(res.Output()) return bootstrapWritePeers(w, "removed ", out.Peers)
if err != nil { }),
return nil, err
}
out, ok := v.(*BootstrapOutput)
if !ok {
return nil, e.TypeErr(out, v)
}
buf := new(bytes.Buffer)
err = bootstrapWritePeers(buf, "removed ", out.Peers)
return buf, err
},
}, },
} }
...@@ -279,44 +217,30 @@ var bootstrapRemoveAllCmd = &cmds.Command{ ...@@ -279,44 +217,30 @@ var bootstrapRemoveAllCmd = &cmds.Command{
ShortDescription: `Outputs the list of peers that were removed.`, ShortDescription: `Outputs the list of peers that were removed.`,
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
r, err := fsrepo.Open(req.InvocContext().ConfigRoot) ctx := env.(*oldcmds.Context)
r, err := fsrepo.Open(ctx.ConfigRoot)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
defer r.Close() defer r.Close()
cfg, err := r.Config() cfg, err := r.Config()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
removed, err := bootstrapRemoveAll(r, cfg) removed, err := bootstrapRemoveAll(r, cfg)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(removed)}) return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(removed)})
}, },
Type: BootstrapOutput{}, Type: BootstrapOutput{},
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: func(res cmds.Response) (io.Reader, error) { cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
v, err := unwrapOutput(res.Output()) return bootstrapWritePeers(w, "removed ", out.Peers)
if err != nil { }),
return nil, err
}
out, ok := v.(*BootstrapOutput)
if !ok {
return nil, e.TypeErr(out, v)
}
buf := new(bytes.Buffer)
err = bootstrapWritePeers(buf, "removed ", out.Peers)
return buf, err
},
}, },
} }
...@@ -326,50 +250,34 @@ var bootstrapListCmd = &cmds.Command{ ...@@ -326,50 +250,34 @@ var bootstrapListCmd = &cmds.Command{
ShortDescription: "Peers are output in the format '<multiaddr>/<peerID>'.", ShortDescription: "Peers are output in the format '<multiaddr>/<peerID>'.",
}, },
Run: func(req cmds.Request, res cmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
r, err := fsrepo.Open(req.InvocContext().ConfigRoot) ctx := env.(*oldcmds.Context)
r, err := fsrepo.Open(ctx.ConfigRoot)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
defer r.Close() defer r.Close()
cfg, err := r.Config() cfg, err := r.Config()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
peers, err := cfg.BootstrapPeers() peers, err := cfg.BootstrapPeers()
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
res.SetOutput(&BootstrapOutput{config.BootstrapPeerStrings(peers)})
return res.Emit(&BootstrapOutput{config.BootstrapPeerStrings(peers)})
}, },
Type: BootstrapOutput{}, Type: BootstrapOutput{},
Marshalers: cmds.MarshalerMap{ Encoders: cmds.EncoderMap{
cmds.Text: bootstrapMarshaler, cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *BootstrapOutput) error {
return bootstrapWritePeers(w, "", out.Peers)
}),
}, },
} }
func bootstrapMarshaler(res cmds.Response) (io.Reader, error) {
v, err := unwrapOutput(res.Output())
if err != nil {
return nil, err
}
out, ok := v.(*BootstrapOutput)
if !ok {
return nil, e.TypeErr(out, v)
}
buf := new(bytes.Buffer)
err = bootstrapWritePeers(buf, "", out.Peers)
return buf, err
}
func bootstrapWritePeers(w io.Writer, prefix string, peers []string) error { func bootstrapWritePeers(w io.Writer, prefix string, peers []string) error {
sort.Stable(sort.StringSlice(peers)) sort.Stable(sort.StringSlice(peers))
for _, peer := range peers { for _, peer := range peers {
_, err := w.Write([]byte(prefix + peer + "\n")) _, err := w.Write([]byte(prefix + peer + "\n"))
......
...@@ -122,7 +122,7 @@ var rootSubcommands = map[string]*cmds.Command{ ...@@ -122,7 +122,7 @@ var rootSubcommands = map[string]*cmds.Command{
"pubsub": PubsubCmd, "pubsub": PubsubCmd,
"repo": RepoCmd, "repo": RepoCmd,
"stats": StatsCmd, "stats": StatsCmd,
"bootstrap": lgc.NewCommand(BootstrapCmd), "bootstrap": BootstrapCmd,
"config": ConfigCmd, "config": ConfigCmd,
"dag": dag.DagCmd, "dag": dag.DagCmd,
"dht": DhtCmd, "dht": DhtCmd,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论