@cryptotaxi247 / kubo / commits / d716a93fa

ipfs files stat: use go-ipfs-cmds

License: MIT Signed-off-by: Michael Muré <batolettre@gmail.com>

Michael Muré committed Jan 31, 2018 at 18:35 UTC d716a93fae1c5d1bd4e7c64f90a968b880424aa8
2 files changed +48 -25
core/commands/files/env.go new
+29
@@ -0,0 +1,29 @@
1 +package commands
2 +
3 +import (
4 + "fmt"
5 +
6 + "github.com/ipfs/go-ipfs/commands"
7 + "github.com/ipfs/go-ipfs/core"
8 + "github.com/ipfs/go-ipfs/repo/config"
9 +)
10 +
11 +// GetNode extracts the node from the environment.
12 +func GetNode(env interface{}) (*core.IpfsNode, error) {
13 + ctx, ok := env.(*commands.Context)
14 + if !ok {
15 + return nil, fmt.Errorf("expected env to be of type %T, got %T", ctx, env)
16 + }
17 +
18 + return ctx.GetNode()
19 +}
20 +
21 +// GetConfig extracts the config from the environment.
22 +func GetConfig(env interface{}) (*config.Config, error) {
23 + ctx, ok := env.(*commands.Context)
24 + if !ok {
25 + return nil, fmt.Errorf("expected env to be of type %T, got %T", ctx, env)
26 + }
27 +
28 + return ctx.GetConfig()
29 +}
core/commands/files/files.go
+19 -25
@@ -57,7 +57,7 @@ operations.
57 "cp": lgc.NewCommand(filesCpCmd),
58 "ls": lgc.NewCommand(filesLsCmd),
59 "mkdir": lgc.NewCommand(filesMkdirCmd),
60 - "stat": lgc.NewCommand(filesStatCmd),
60 + "stat": filesStatCmd,
61 "rm": lgc.NewCommand(filesRmCmd),
62 "flush": lgc.NewCommand(filesFlushCmd),
63 "chcid": lgc.NewCommand(filesChcidCmd),
@@ -75,7 +75,7 @@ CumulativeSize: <cumulsize>
75 ChildBlocks: <childs>
76 Type: <type>`
77
78 -var filesStatCmd = &oldcmds.Command{
78 +var filesStatCmd = &cmds.Command{
79 Helptext: cmdkit.HelpText{
80 Tagline: "Display file status.",
81 },
@@ -89,20 +89,20 @@ var filesStatCmd = &oldcmds.Command{
89 cmdkit.BoolOption("hash", "Print only hash. Implies '--format=<hash>'. Conflicts with other format options."),
90 cmdkit.BoolOption("size", "Print only size. Implies '--format=<cumulsize>'. Conflicts with other format options."),
91 },
92 - Run: func(req oldcmds.Request, res oldcmds.Response) {
92 + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) {
93
94 _, err := statGetFormatOptions(req)
95 if err != nil {
96 res.SetError(err, cmdkit.ErrClient)
97 }
98
99 - node, err := req.InvocContext().GetNode()
99 + node, err := GetNode(env)
100 if err != nil {
101 res.SetError(err, cmdkit.ErrNormal)
102 return
103 }
104
105 - path, err := checkPath(req.Arguments()[0])
105 + path, err := checkPath(req.Arguments[0])
106 if err != nil {
107 res.SetError(err, cmdkit.ErrNormal)
108 return
@@ -114,37 +114,31 @@ var filesStatCmd = &oldcmds.Command{
114 return
115 }
116
117 - o, err := statNode(node.DAG, fsn)
117 + o, err := statNode(fsn)
118 if err != nil {
119 res.SetError(err, cmdkit.ErrNormal)
120 return
121 }
122
123 - res.SetOutput(o)
123 + cmds.EmitOnce(res, o)
124 },
125 - Marshalers: oldcmds.MarshalerMap{
126 - oldcmds.Text: func(res oldcmds.Response) (io.Reader, error) {
127 - v, err := unwrapOutput(res.Output())
128 - if err != nil {
129 - return nil, err
130 - }
131 -
125 + Encoders: cmds.EncoderMap{
126 + cmds.Text: cmds.MakeEncoder(func(req *cmds.Request, w io.Writer, v interface{}) error {
127 out, ok := v.(*Object)
128 if !ok {
134 - return nil, e.TypeErr(out, v)
129 + return e.TypeErr(out, v)
130 }
136 - buf := new(bytes.Buffer)
131
138 - s, _ := statGetFormatOptions(res.Request())
132 + s, _ := statGetFormatOptions(req)
133 s = strings.Replace(s, "<hash>", out.Hash, -1)
134 s = strings.Replace(s, "<size>", fmt.Sprintf("%d", out.Size), -1)
135 s = strings.Replace(s, "<cumulsize>", fmt.Sprintf("%d", out.CumulativeSize), -1)
136 s = strings.Replace(s, "<childs>", fmt.Sprintf("%d", out.Blocks), -1)
137 s = strings.Replace(s, "<type>", out.Type, -1)
138
145 - fmt.Fprintln(buf, s)
146 - return buf, nil
147 - },
139 + _, err := fmt.Fprintln(w, s)
140 + return err
141 + }),
142 },
143 Type: Object{},
144 }
@@ -153,11 +147,11 @@ func moreThanOne(a, b, c bool) bool {
147 return a && b || b && c || a && c
148 }
149
156 -func statGetFormatOptions(req oldcmds.Request) (string, error) {
150 +func statGetFormatOptions(req *cmds.Request) (string, error) {
151
158 - hash, _, _ := req.Option("hash").Bool()
159 - size, _, _ := req.Option("size").Bool()
160 - format, _, _ := req.Option("format").String()
152 + hash, _ := req.Options["hash"].(bool)
153 + size, _ := req.Options["size"].(bool)
154 + format, _ := req.Options["format"].(string)
155
156 if moreThanOne(hash, size, format != defaultStatFormat) {
157 return "", formatError
@@ -172,7 +166,7 @@ func statGetFormatOptions(req oldcmds.Request) (string, error) {
166 }
167 }
168
175 -func statNode(ds ipld.DAGService, fsn mfs.FSNode) (*Object, error) {
169 +func statNode(fsn mfs.FSNode) (*Object, error) {
170 nd, err := fsn.GetNode()
171 if err != nil {
172 return nil, err