Skip to content

Commit cd108a0

Browse files
committed
cmds/file: use new cmds lib
License: MIT Signed-off-by: Overbool <[email protected]>
1 parent 8189650 commit cd108a0

File tree

3 files changed

+45
-80
lines changed

3 files changed

+45
-80
lines changed

core/commands/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ var rootSubcommands = map[string]*cmds.Command{
138138
"resolve": ResolveCmd,
139139
"swarm": SwarmCmd,
140140
"tar": TarCmd,
141-
"file": lgc.NewCommand(unixfs.UnixFSCmd),
141+
"file": unixfs.UnixFSCmd,
142142
"update": lgc.NewCommand(ExternalBinary()),
143143
"urlstore": urlStoreCmd,
144144
"version": VersionCmd,

core/commands/unixfs/ls.go

Lines changed: 42 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package unixfs
22

33
import (
4-
"bytes"
54
"fmt"
65
"io"
76
"sort"
87
"text/tabwriter"
98

10-
cmds "github.com/ipfs/go-ipfs/commands"
11-
e "github.com/ipfs/go-ipfs/core/commands/e"
9+
cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
1210
iface "github.com/ipfs/go-ipfs/core/coreapi/interface"
1311

1412
unixfs "gx/ipfs/QmXLCwhHh7bxRsBnCKNE9BAN87V44aSxXLquZYTtjr6fZ3/go-unixfs"
13+
cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds"
1514
merkledag "gx/ipfs/QmaDBne4KeY3UepeqSVKYpSmQGa3q9zP6x3LfVF2UjF3Hc/go-merkledag"
1615
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
1716
)
@@ -72,39 +71,39 @@ possible, please use 'ipfs ls' instead.
7271
Arguments: []cmdkit.Argument{
7372
cmdkit.StringArg("ipfs-path", true, true, "The path to the IPFS object(s) to list links from.").EnableStdin(),
7473
},
75-
Run: func(req cmds.Request, res cmds.Response) {
76-
node, err := req.InvocContext().GetNode()
74+
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
75+
nd, err := cmdenv.GetNode(env)
7776
if err != nil {
78-
res.SetError(err, cmdkit.ErrNormal)
79-
return
77+
return err
8078
}
8179

82-
api, err := req.InvocContext().GetApi()
80+
api, err := cmdenv.GetApi(env)
8381
if err != nil {
84-
res.SetError(err, cmdkit.ErrNormal)
85-
return
82+
return err
8683
}
8784

88-
paths := req.Arguments()
85+
if err := req.ParseBodyArgs(); err != nil {
86+
return err
87+
}
88+
89+
paths := req.Arguments
8990

9091
output := LsOutput{
9192
Arguments: map[string]string{},
9293
Objects: map[string]*LsObject{},
9394
}
9495

9596
for _, p := range paths {
96-
ctx := req.Context()
97+
ctx := req.Context
9798

9899
fpath, err := iface.ParsePath(p)
99100
if err != nil {
100-
res.SetError(err, cmdkit.ErrNormal)
101-
return
101+
return err
102102
}
103103

104104
merkleNode, err := api.ResolveNode(ctx, fpath)
105105
if err != nil {
106-
res.SetError(err, cmdkit.ErrNormal)
107-
return
106+
return err
108107
}
109108

110109
c := merkleNode.Cid()
@@ -119,14 +118,12 @@ possible, please use 'ipfs ls' instead.
119118

120119
ndpb, ok := merkleNode.(*merkledag.ProtoNode)
121120
if !ok {
122-
res.SetError(merkledag.ErrNotProtobuf, cmdkit.ErrNormal)
123-
return
121+
return merkledag.ErrNotProtobuf
124122
}
125123

126124
unixFSNode, err := unixfs.FSNodeFromBytes(ndpb.Data())
127125
if err != nil {
128-
res.SetError(err, cmdkit.ErrNormal)
129-
return
126+
return err
130127
}
131128

132129
t := unixFSNode.Type()
@@ -142,27 +139,23 @@ possible, please use 'ipfs ls' instead.
142139
break
143140
case unixfs.THAMTShard:
144141
// We need a streaming ls API for this.
145-
res.SetError(fmt.Errorf("cannot list large directories yet"), cmdkit.ErrNormal)
146-
return
142+
return fmt.Errorf("cannot list large directories yet")
147143
case unixfs.TDirectory:
148144
links := make([]LsLink, len(merkleNode.Links()))
149145
output.Objects[hash].Links = links
150146
for i, link := range merkleNode.Links() {
151-
linkNode, err := link.GetNode(ctx, node.DAG)
147+
linkNode, err := link.GetNode(ctx, nd.DAG)
152148
if err != nil {
153-
res.SetError(err, cmdkit.ErrNormal)
154-
return
149+
return err
155150
}
156151
lnpb, ok := linkNode.(*merkledag.ProtoNode)
157152
if !ok {
158-
res.SetError(merkledag.ErrNotProtobuf, cmdkit.ErrNormal)
159-
return
153+
return merkledag.ErrNotProtobuf
160154
}
161155

162156
d, err := unixfs.FSNodeFromBytes(lnpb.Data())
163157
if err != nil {
164-
res.SetError(err, cmdkit.ErrNormal)
165-
return
158+
return err
166159
}
167160
t := d.Type()
168161
lsLink := LsLink{
@@ -178,36 +171,24 @@ possible, please use 'ipfs ls' instead.
178171
links[i] = lsLink
179172
}
180173
case unixfs.TSymlink:
181-
res.SetError(fmt.Errorf("cannot list symlinks yet"), cmdkit.ErrNormal)
182-
return
174+
return fmt.Errorf("cannot list symlinks yet")
183175
default:
184-
res.SetError(fmt.Errorf("unrecognized type: %s", t), cmdkit.ErrImplementation)
185-
return
176+
return fmt.Errorf("unrecognized type: %s", t)
186177
}
187178
}
188179

189-
res.SetOutput(&output)
180+
return cmds.EmitOnce(res, &output)
190181
},
191-
Marshalers: cmds.MarshalerMap{
192-
cmds.Text: func(res cmds.Response) (io.Reader, error) {
193-
v, err := unwrapOutput(res.Output())
194-
if err != nil {
195-
return nil, err
196-
}
197-
198-
output, ok := v.(*LsOutput)
199-
if !ok {
200-
return nil, e.TypeErr(output, v)
201-
}
202-
buf := new(bytes.Buffer)
203-
w := tabwriter.NewWriter(buf, 1, 2, 1, ' ', 0)
182+
Encoders: cmds.EncoderMap{
183+
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *LsOutput) error {
184+
tw := tabwriter.NewWriter(w, 1, 2, 1, ' ', 0)
204185

205186
nonDirectories := []string{}
206187
directories := []string{}
207-
for argument, hash := range output.Arguments {
208-
object, ok := output.Objects[hash]
188+
for argument, hash := range out.Arguments {
189+
object, ok := out.Objects[hash]
209190
if !ok {
210-
return nil, fmt.Errorf("unresolved hash: %s", hash)
191+
return fmt.Errorf("unresolved hash: %s", hash)
211192
}
212193

213194
if object.Type == "Directory" {
@@ -220,36 +201,36 @@ possible, please use 'ipfs ls' instead.
220201
sort.Strings(directories)
221202

222203
for _, argument := range nonDirectories {
223-
fmt.Fprintf(w, "%s\n", argument)
204+
fmt.Fprintf(tw, "%s\n", argument)
224205
}
225206

226207
seen := map[string]bool{}
227208
for i, argument := range directories {
228-
hash := output.Arguments[argument]
209+
hash := out.Arguments[argument]
229210
if _, ok := seen[hash]; ok {
230211
continue
231212
}
232213
seen[hash] = true
233214

234-
object := output.Objects[hash]
215+
object := out.Objects[hash]
235216
if i > 0 || len(nonDirectories) > 0 {
236-
fmt.Fprintln(w)
217+
fmt.Fprintln(tw)
237218
}
238-
if len(output.Arguments) > 1 {
219+
if len(out.Arguments) > 1 {
239220
for _, arg := range directories[i:] {
240-
if output.Arguments[arg] == hash {
241-
fmt.Fprintf(w, "%s:\n", arg)
221+
if out.Arguments[arg] == hash {
222+
fmt.Fprintf(tw, "%s:\n", arg)
242223
}
243224
}
244225
}
245226
for _, link := range object.Links {
246-
fmt.Fprintf(w, "%s\n", link.Name)
227+
fmt.Fprintf(tw, "%s\n", link.Name)
247228
}
248229
}
249-
w.Flush()
230+
tw.Flush()
250231

251-
return buf, nil
252-
},
232+
return nil
233+
}),
253234
},
254235
Type: LsOutput{},
255236
}

core/commands/unixfs/unixfs.go

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package unixfs
22

33
import (
4-
cmds "github.com/ipfs/go-ipfs/commands"
5-
e "github.com/ipfs/go-ipfs/core/commands/e"
6-
7-
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
4+
cmds "gx/ipfs/Qma6uuSyjkecGhMFFLfzyJDPyoDtNJSHJNweDccZhaWkgU/go-ipfs-cmds"
5+
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
86
)
97

108
var UnixFSCmd = &cmds.Command{
@@ -26,17 +24,3 @@ objects (e.g. fanout and chunking).
2624
"ls": LsCmd,
2725
},
2826
}
29-
30-
// copy+pasted from ../commands.go
31-
func unwrapOutput(i interface{}) (interface{}, error) {
32-
var (
33-
ch <-chan interface{}
34-
ok bool
35-
)
36-
37-
if ch, ok = i.(<-chan interface{}); !ok {
38-
return nil, e.TypeErr(ch, i)
39-
}
40-
41-
return <-ch, nil
42-
}

0 commit comments

Comments
 (0)