From d716a93fae1c5d1bd4e7c64f90a968b880424aa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Mur=C3=A9?= Date: Wed, 31 Jan 2018 18:35:31 +0100 Subject: [PATCH] ipfs files stat: use go-ipfs-cmds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit License: MIT Signed-off-by: Michael Muré --- core/commands/files/env.go | 29 ++++++++++++++++++++++++ core/commands/files/files.go | 44 ++++++++++++++++-------------------- 2 files changed, 48 insertions(+), 25 deletions(-) create mode 100644 core/commands/files/env.go diff --git a/core/commands/files/env.go b/core/commands/files/env.go new file mode 100644 index 000000000..d884292e3 --- /dev/null +++ b/core/commands/files/env.go @@ -0,0 +1,29 @@ +package commands + +import ( + "fmt" + + "github.com/ipfs/go-ipfs/commands" + "github.com/ipfs/go-ipfs/core" + "github.com/ipfs/go-ipfs/repo/config" +) + +// GetNode extracts the node from the environment. +func GetNode(env interface{}) (*core.IpfsNode, error) { + ctx, ok := env.(*commands.Context) + if !ok { + return nil, fmt.Errorf("expected env to be of type %T, got %T", ctx, env) + } + + return ctx.GetNode() +} + +// GetConfig extracts the config from the environment. +func GetConfig(env interface{}) (*config.Config, error) { + ctx, ok := env.(*commands.Context) + if !ok { + return nil, fmt.Errorf("expected env to be of type %T, got %T", ctx, env) + } + + return ctx.GetConfig() +} diff --git a/core/commands/files/files.go b/core/commands/files/files.go index fa1ea6a2f..f7723c349 100644 --- a/core/commands/files/files.go +++ b/core/commands/files/files.go @@ -57,7 +57,7 @@ operations. "cp": lgc.NewCommand(filesCpCmd), "ls": lgc.NewCommand(filesLsCmd), "mkdir": lgc.NewCommand(filesMkdirCmd), - "stat": lgc.NewCommand(filesStatCmd), + "stat": filesStatCmd, "rm": lgc.NewCommand(filesRmCmd), "flush": lgc.NewCommand(filesFlushCmd), "chcid": lgc.NewCommand(filesChcidCmd), @@ -75,7 +75,7 @@ CumulativeSize: ChildBlocks: Type: ` -var filesStatCmd = &oldcmds.Command{ +var filesStatCmd = &cmds.Command{ Helptext: cmdkit.HelpText{ Tagline: "Display file status.", }, @@ -89,20 +89,20 @@ var filesStatCmd = &oldcmds.Command{ cmdkit.BoolOption("hash", "Print only hash. Implies '--format='. Conflicts with other format options."), cmdkit.BoolOption("size", "Print only size. Implies '--format='. Conflicts with other format options."), }, - Run: func(req oldcmds.Request, res oldcmds.Response) { + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) { _, err := statGetFormatOptions(req) if err != nil { res.SetError(err, cmdkit.ErrClient) } - node, err := req.InvocContext().GetNode() + node, err := GetNode(env) if err != nil { res.SetError(err, cmdkit.ErrNormal) return } - path, err := checkPath(req.Arguments()[0]) + path, err := checkPath(req.Arguments[0]) if err != nil { res.SetError(err, cmdkit.ErrNormal) return @@ -114,37 +114,31 @@ var filesStatCmd = &oldcmds.Command{ return } - o, err := statNode(node.DAG, fsn) + o, err := statNode(fsn) if err != nil { res.SetError(err, cmdkit.ErrNormal) return } - res.SetOutput(o) + cmds.EmitOnce(res, o) }, - Marshalers: oldcmds.MarshalerMap{ - oldcmds.Text: func(res oldcmds.Response) (io.Reader, error) { - v, err := unwrapOutput(res.Output()) - if err != nil { - return nil, err - } - + Encoders: cmds.EncoderMap{ + cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error { out, ok := v.(*Object) if !ok { - return nil, e.TypeErr(out, v) + return e.TypeErr(out, v) } - buf := new(bytes.Buffer) - s, _ := statGetFormatOptions(res.Request()) + s, _ := statGetFormatOptions(req) s = strings.Replace(s, "", out.Hash, -1) s = strings.Replace(s, "", fmt.Sprintf("%d", out.Size), -1) s = strings.Replace(s, "", fmt.Sprintf("%d", out.CumulativeSize), -1) s = strings.Replace(s, "", fmt.Sprintf("%d", out.Blocks), -1) s = strings.Replace(s, "", out.Type, -1) - fmt.Fprintln(buf, s) - return buf, nil - }, + _, err := fmt.Fprintln(w, s) + return err + }), }, Type: Object{}, } @@ -153,11 +147,11 @@ func moreThanOne(a, b, c bool) bool { return a && b || b && c || a && c } -func statGetFormatOptions(req oldcmds.Request) (string, error) { +func statGetFormatOptions(req *cmds.Request) (string, error) { - hash, _, _ := req.Option("hash").Bool() - size, _, _ := req.Option("size").Bool() - format, _, _ := req.Option("format").String() + hash, _ := req.Options["hash"].(bool) + size, _ := req.Options["size"].(bool) + format, _ := req.Options["format"].(string) if moreThanOne(hash, size, format != defaultStatFormat) { return "", formatError @@ -172,7 +166,7 @@ func statGetFormatOptions(req oldcmds.Request) (string, error) { } } -func statNode(ds ipld.DAGService, fsn mfs.FSNode) (*Object, error) { +func statNode(fsn mfs.FSNode) (*Object, error) { nd, err := fsn.GetNode() if err != nil { return nil, err