make files stat --with-local return immediately when no data is present
License: MIT Signed-off-by: Michael Muré <batolettre@gmail.com>
Michael Muré committed
Feb 21, 2018 at 18:41 UTC
e2bad6ec5e107691c10581067b20cff8e97086f5
1 file changed
+17
-11
core/commands/files.go
+17
-11
@@ -125,7 +125,20 @@ var filesStatCmd = &cmds.Command{
125
return
126
}
127
128
- nd, err := getNodeFromPath(req.Context, node, path)
128
+ withLocal, _ := req.Options["with-local"].(bool)
129
+
130
+ var dagserv ipld.DAGService
131
+ if withLocal {
132
+ // an offline DAGService will not fetch from the network
133
+ dagserv = dag.NewDAGService(bservice.New(
134
+ node.Blockstore,
135
+ offline.Exchange(node.Blockstore),
136
+ ))
137
+ } else {
138
+ dagserv = node.DAG
139
+ }
140
+
141
+ nd, err := getNodeFromPath(req.Context, node, dagserv, path)
142
if err != nil {
143
res.SetError(err, cmdkit.ErrNormal)
144
return
@@ -137,18 +150,11 @@ var filesStatCmd = &cmds.Command{
150
return
151
}
152
140
- withLocal, _ := req.Options["with-local"].(bool)
153
if !withLocal {
154
res.Emit(o)
155
return
156
}
157
146
- // an offline DAGService will not fetch from the network
147
- dagserv := dag.NewDAGService(bservice.New(
148
- node.Blockstore,
149
- offline.Exchange(node.Blockstore),
150
- ))
151
-
158
local, sizeLocal, err := walkBlock(req.Context, dagserv, nd)
159
160
o.WithLocality = true
@@ -321,7 +327,7 @@ var filesCpCmd = &oldcmds.Command{
327
dst += gopath.Base(src)
328
}
329
324
- nd, err := getNodeFromPath(req.Context(), node, src)
330
+ nd, err := getNodeFromPath(req.Context(), node, node.DAG, src)
331
if err != nil {
332
res.SetError(err, cmdkit.ErrNormal)
333
return
@@ -345,7 +351,7 @@ var filesCpCmd = &oldcmds.Command{
351
},
352
}
353
348
-func getNodeFromPath(ctx context.Context, node *core.IpfsNode, p string) (ipld.Node, error) {
354
+func getNodeFromPath(ctx context.Context, node *core.IpfsNode, dagservice ipld.DAGService, p string) (ipld.Node, error) {
355
switch {
356
case strings.HasPrefix(p, "/ipfs/"):
357
np, err := path.ParsePath(p)
@@ -354,7 +360,7 @@ func getNodeFromPath(ctx context.Context, node *core.IpfsNode, p string) (ipld.N
360
}
361
362
resolver := &resolver.Resolver{
357
- DAG: node.DAG,
363
+ DAG: dagservice,
364
ResolveOnce: uio.ResolveUnixfsOnce,
365
}
366