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