Unverified 提交 a6a78924 作者: Steven Allen 提交者: GitHub

Merge pull request #5676 from overbool/refactor/commands/bitswap

commands/bitswap: use new cmds lib
package commands package commands
import ( import (
"bytes"
"fmt" "fmt"
"io" "io"
oldcmds "github.com/ipfs/go-ipfs/commands"
lgc "github.com/ipfs/go-ipfs/commands/legacy"
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv" cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
e "github.com/ipfs/go-ipfs/core/commands/e" e "github.com/ipfs/go-ipfs/core/commands/e"
humanize "gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
bitswap "gx/ipfs/QmXRphxBT4BH2GqGHUSbqULm7wNsxnpA2NrbNaY3DU1Y5K/go-bitswap" bitswap "gx/ipfs/QmXRphxBT4BH2GqGHUSbqULm7wNsxnpA2NrbNaY3DU1Y5K/go-bitswap"
decision "gx/ipfs/QmXRphxBT4BH2GqGHUSbqULm7wNsxnpA2NrbNaY3DU1Y5K/go-bitswap/decision" decision "gx/ipfs/QmXRphxBT4BH2GqGHUSbqULm7wNsxnpA2NrbNaY3DU1Y5K/go-bitswap/decision"
"gx/ipfs/QmPSBJL4momYnE7DcUyk2DVhD6rH488ZmHBGLbxNdhU44K/go-humanize"
cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds"
peer "gx/ipfs/QmcqU6QUDSXprb1518vYDGczrTJTyGwLG9eUa5iNX4xUtS/go-libp2p-peer" peer "gx/ipfs/QmcqU6QUDSXprb1518vYDGczrTJTyGwLG9eUa5iNX4xUtS/go-libp2p-peer"
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit" cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
...@@ -26,9 +23,9 @@ var BitswapCmd = &cmds.Command{ ...@@ -26,9 +23,9 @@ var BitswapCmd = &cmds.Command{
Subcommands: map[string]*cmds.Command{ Subcommands: map[string]*cmds.Command{
"stat": bitswapStatCmd, "stat": bitswapStatCmd,
"wantlist": lgc.NewCommand(showWantlistCmd), "wantlist": showWantlistCmd,
"ledger": lgc.NewCommand(ledgerCmd), "ledger": ledgerCmd,
"reprovide": lgc.NewCommand(reprovideCmd), "reprovide": reprovideCmd,
}, },
} }
...@@ -36,7 +33,7 @@ const ( ...@@ -36,7 +33,7 @@ const (
peerOptionName = "peer" peerOptionName = "peer"
) )
var showWantlistCmd = &oldcmds.Command{ var showWantlistCmd = &cmds.Command{
Helptext: cmdkit.HelpText{ Helptext: cmdkit.HelpText{
Tagline: "Show blocks currently on the wantlist.", Tagline: "Show blocks currently on the wantlist.",
ShortDescription: ` ShortDescription: `
...@@ -46,47 +43,43 @@ Print out all blocks currently on the bitswap wantlist for the local peer.`, ...@@ -46,47 +43,43 @@ Print out all blocks currently on the bitswap wantlist for the local peer.`,
cmdkit.StringOption(peerOptionName, "p", "Specify which peer to show wantlist for. Default: self."), cmdkit.StringOption(peerOptionName, "p", "Specify which peer to show wantlist for. Default: self."),
}, },
Type: KeyList{}, Type: KeyList{},
Run: func(req oldcmds.Request, res oldcmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
nd, err := req.InvocContext().GetNode() nd, err := cmdenv.GetNode(env)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if !nd.OnlineMode() { if !nd.OnlineMode() {
res.SetError(ErrNotOnline, cmdkit.ErrClient) return ErrNotOnline
return
} }
bs, ok := nd.Exchange.(*bitswap.Bitswap) bs, ok := nd.Exchange.(*bitswap.Bitswap)
if !ok { if !ok {
res.SetError(e.TypeErr(bs, nd.Exchange), cmdkit.ErrNormal) return e.TypeErr(bs, nd.Exchange)
return
} }
pstr, found, err := req.Option(peerOptionName).String() pstr, found := req.Options[peerOptionName].(string)
if err != nil {
res.SetError(err, cmdkit.ErrNormal)
return
}
if found { if found {
pid, err := peer.IDB58Decode(pstr) pid, err := peer.IDB58Decode(pstr)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if pid == nd.Identity { if pid == nd.Identity {
res.SetOutput(&KeyList{bs.GetWantlist()}) return cmds.EmitOnce(res, &KeyList{bs.GetWantlist()})
return
} }
res.SetOutput(&KeyList{bs.WantlistForPeer(pid)}) return cmds.EmitOnce(res, &KeyList{bs.WantlistForPeer(pid)})
} else {
res.SetOutput(&KeyList{bs.GetWantlist()})
} }
return cmds.EmitOnce(res, &KeyList{bs.GetWantlist()})
}, },
Marshalers: oldcmds.MarshalerMap{ Encoders: cmds.EncoderMap{
oldcmds.Text: KeyListTextMarshaler, cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *KeyList) error {
for _, key := range out.Keys {
fmt.Fprintln(w, key.String())
}
return nil
}),
}, },
} }
...@@ -147,7 +140,7 @@ var bitswapStatCmd = &cmds.Command{ ...@@ -147,7 +140,7 @@ var bitswapStatCmd = &cmds.Command{
}, },
} }
var ledgerCmd = &oldcmds.Command{ var ledgerCmd = &cmds.Command{
Helptext: cmdkit.HelpText{ Helptext: cmdkit.HelpText{
Tagline: "Show the current ledger for a peer.", Tagline: "Show the current ledger for a peer.",
ShortDescription: ` ShortDescription: `
...@@ -160,81 +153,63 @@ prints the ledger associated with a given peer. ...@@ -160,81 +153,63 @@ prints the ledger associated with a given peer.
cmdkit.StringArg("peer", true, false, "The PeerID (B58) of the ledger to inspect."), cmdkit.StringArg("peer", true, false, "The PeerID (B58) of the ledger to inspect."),
}, },
Type: decision.Receipt{}, Type: decision.Receipt{},
Run: func(req oldcmds.Request, res oldcmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
nd, err := req.InvocContext().GetNode() nd, err := cmdenv.GetNode(env)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if !nd.OnlineMode() { if !nd.OnlineMode() {
res.SetError(ErrNotOnline, cmdkit.ErrClient) return ErrNotOnline
return
} }
bs, ok := nd.Exchange.(*bitswap.Bitswap) bs, ok := nd.Exchange.(*bitswap.Bitswap)
if !ok { if !ok {
res.SetError(e.TypeErr(bs, nd.Exchange), cmdkit.ErrNormal) return e.TypeErr(bs, nd.Exchange)
return
} }
partner, err := peer.IDB58Decode(req.Arguments()[0]) partner, err := peer.IDB58Decode(req.Arguments[0])
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrClient) return err
return
} }
res.SetOutput(bs.LedgerForPeer(partner)) return cmds.EmitOnce(res, bs.LedgerForPeer(partner))
}, },
Marshalers: oldcmds.MarshalerMap{ Encoders: cmds.EncoderMap{
oldcmds.Text: func(res oldcmds.Response) (io.Reader, error) { cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *decision.Receipt) error {
v, err := unwrapOutput(res.Output()) fmt.Fprintf(w, "Ledger for %s\n"+
if err != nil {
return nil, err
}
out, ok := v.(*decision.Receipt)
if !ok {
return nil, e.TypeErr(out, v)
}
buf := new(bytes.Buffer)
fmt.Fprintf(buf, "Ledger for %s\n"+
"Debt ratio:\t%f\n"+ "Debt ratio:\t%f\n"+
"Exchanges:\t%d\n"+ "Exchanges:\t%d\n"+
"Bytes sent:\t%d\n"+ "Bytes sent:\t%d\n"+
"Bytes received:\t%d\n\n", "Bytes received:\t%d\n\n",
out.Peer, out.Value, out.Exchanged, out.Peer, out.Value, out.Exchanged,
out.Sent, out.Recv) out.Sent, out.Recv)
return buf, nil return nil
}, }),
}, },
} }
var reprovideCmd = &oldcmds.Command{ var reprovideCmd = &cmds.Command{
Helptext: cmdkit.HelpText{ Helptext: cmdkit.HelpText{
Tagline: "Trigger reprovider.", Tagline: "Trigger reprovider.",
ShortDescription: ` ShortDescription: `
Trigger reprovider to announce our data to network. Trigger reprovider to announce our data to network.
`, `,
}, },
Run: func(req oldcmds.Request, res oldcmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
nd, err := req.InvocContext().GetNode() nd, err := cmdenv.GetNode(env)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
if !nd.OnlineMode() { if !nd.OnlineMode() {
res.SetError(ErrNotOnline, cmdkit.ErrClient) return ErrNotOnline
return
} }
err = nd.Reprovider.Trigger(req.Context()) err = nd.Reprovider.Trigger(req.Context)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
res.SetOutput(nil) return nil
}, },
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论