提交 dfde3915 作者: Overbool 提交者: Steven Allen

commands/filestore: use new cmds lib

License: MIT
Signed-off-by: 's avatarOverbool <overbool.xu@gmail.com>
上级 392e1a97
...@@ -5,12 +5,9 @@ import ( ...@@ -5,12 +5,9 @@ import (
"fmt" "fmt"
"io" "io"
oldCmds "github.com/ipfs/go-ipfs/commands" core "github.com/ipfs/go-ipfs/core"
lgc "github.com/ipfs/go-ipfs/commands/legacy"
"github.com/ipfs/go-ipfs/core"
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" filestore "github.com/ipfs/go-ipfs/filestore"
"github.com/ipfs/go-ipfs/filestore"
cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid" cid "gx/ipfs/QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw/go-cid"
cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds" cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds"
...@@ -23,8 +20,8 @@ var FileStoreCmd = &cmds.Command{ ...@@ -23,8 +20,8 @@ var FileStoreCmd = &cmds.Command{
}, },
Subcommands: map[string]*cmds.Command{ Subcommands: map[string]*cmds.Command{
"ls": lsFileStore, "ls": lsFileStore,
"verify": lgc.NewCommand(verifyFileStore), "verify": verifyFileStore,
"dups": lgc.NewCommand(dupsFileStore), "dups": dupsFileStore,
}, },
} }
...@@ -88,7 +85,7 @@ The output is: ...@@ -88,7 +85,7 @@ The output is:
Type: filestore.ListRes{}, Type: filestore.ListRes{},
} }
var verifyFileStore = &oldCmds.Command{ var verifyFileStore = &cmds.Command{
Helptext: cmdkit.HelpText{ Helptext: cmdkit.HelpText{
Tagline: "Verify objects in filestore.", Tagline: "Verify objects in filestore.",
LongDescription: ` LongDescription: `
...@@ -118,69 +115,54 @@ For ERROR entries the error will also be printed to stderr. ...@@ -118,69 +115,54 @@ For ERROR entries the error will also be printed to stderr.
Options: []cmdkit.Option{ Options: []cmdkit.Option{
cmdkit.BoolOption(fileOrderOptionName, "verify the objects based on the order of the backing file"), cmdkit.BoolOption(fileOrderOptionName, "verify the objects based on the order of the backing file"),
}, },
Run: func(req oldCmds.Request, res oldCmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
_, fs, err := getFilestore(req.InvocContext()) _, fs, err := getFilestore(env)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
args := req.Arguments() args := req.Arguments
if len(args) > 0 { if len(args) > 0 {
out := perKeyActionToChan(req.Context(), args, func(c cid.Cid) *filestore.ListRes { out := perKeyActionToChan(req.Context, args, func(c cid.Cid) *filestore.ListRes {
return filestore.Verify(fs, c) return filestore.Verify(fs, c)
}) })
res.SetOutput(out) return res.Emit(out)
} else { } else {
fileOrder, _, _ := req.Option(fileOrderOptionName).Bool() fileOrder, _ := req.Options[fileOrderOptionName].(bool)
next, err := filestore.VerifyAll(fs, fileOrder) next, err := filestore.VerifyAll(fs, fileOrder)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
out := listResToChan(req.Context(), next) out := listResToChan(req.Context, next)
res.SetOutput(out) return res.Emit(out)
} }
}, },
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 *filestore.ListRes) error {
v, err := unwrapOutput(res.Output()) if out.Status == filestore.StatusOtherError {
if err != nil { return fmt.Errorf(out.ErrorMsg)
return nil, err
}
r, ok := v.(*filestore.ListRes)
if !ok {
return nil, e.TypeErr(r, v)
} }
fmt.Fprintf(w, "%s %s\n", out.Status.Format(), out.FormatLong())
if r.Status == filestore.StatusOtherError { return nil
fmt.Fprintf(res.Stderr(), "%s\n", r.ErrorMsg) }),
}
fmt.Fprintf(res.Stdout(), "%s %s\n", r.Status.Format(), r.FormatLong())
return nil, nil
},
}, },
Type: filestore.ListRes{}, Type: filestore.ListRes{},
} }
var dupsFileStore = &oldCmds.Command{ var dupsFileStore = &cmds.Command{
Helptext: cmdkit.HelpText{ Helptext: cmdkit.HelpText{
Tagline: "List blocks that are both in the filestore and standard block storage.", Tagline: "List blocks that are both in the filestore and standard block storage.",
}, },
Run: func(req oldCmds.Request, res oldCmds.Response) { Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
_, fs, err := getFilestore(req.InvocContext()) _, fs, err := getFilestore(env)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
ch, err := fs.FileManager().AllKeysChan(req.Context()) ch, err := fs.FileManager().AllKeysChan(req.Context)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) return err
return
} }
out := make(chan interface{}, 128) out := make(chan interface{}, 128)
res.SetOutput((<-chan interface{})(out))
go func() { go func() {
defer close(out) defer close(out)
...@@ -189,25 +171,36 @@ var dupsFileStore = &oldCmds.Command{ ...@@ -189,25 +171,36 @@ var dupsFileStore = &oldCmds.Command{
if err != nil { if err != nil {
select { select {
case out <- &RefWrapper{Err: err.Error()}: case out <- &RefWrapper{Err: err.Error()}:
case <-req.Context().Done(): case <-req.Context.Done():
} }
return return
} }
if have { if have {
select { select {
case out <- &RefWrapper{Ref: cid.String()}: case out <- &RefWrapper{Ref: cid.String()}:
case <-req.Context().Done(): case <-req.Context.Done():
return return
} }
} }
} }
}() }()
return res.Emit(out)
},
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *RefWrapper) error {
if out.Err != "" {
return fmt.Errorf(out.Err)
}
fmt.Fprintln(w, out.Ref)
return nil
}),
}, },
Marshalers: refsMarshallerMap,
Type: RefWrapper{}, Type: RefWrapper{},
} }
func getFilestore(env interface{}) (*core.IpfsNode, *filestore.Filestore, error) { func getFilestore(env cmds.Environment) (*core.IpfsNode, *filestore.Filestore, error) {
n, err := cmdenv.GetNode(env) n, err := cmdenv.GetNode(env)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论