make files stat --with-local return immediately when no data is present

License: MIT
Signed-off-by: 's avatarMichael Muré <batolettre@gmail.com>
上级 95f308da
...@@ -125,7 +125,20 @@ var filesStatCmd = &cmds.Command{ ...@@ -125,7 +125,20 @@ var filesStatCmd = &cmds.Command{
return return
} }
nd, err := getNodeFromPath(req.Context, node, path) withLocal, _ := req.Options["with-local"].(bool)
var dagserv ipld.DAGService
if withLocal {
// an offline DAGService will not fetch from the network
dagserv = dag.NewDAGService(bservice.New(
node.Blockstore,
offline.Exchange(node.Blockstore),
))
} else {
dagserv = node.DAG
}
nd, err := getNodeFromPath(req.Context, node, dagserv, path)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) res.SetError(err, cmdkit.ErrNormal)
return return
...@@ -137,18 +150,11 @@ var filesStatCmd = &cmds.Command{ ...@@ -137,18 +150,11 @@ var filesStatCmd = &cmds.Command{
return return
} }
withLocal, _ := req.Options["with-local"].(bool)
if !withLocal { if !withLocal {
res.Emit(o) res.Emit(o)
return return
} }
// an offline DAGService will not fetch from the network
dagserv := dag.NewDAGService(bservice.New(
node.Blockstore,
offline.Exchange(node.Blockstore),
))
local, sizeLocal, err := walkBlock(req.Context, dagserv, nd) local, sizeLocal, err := walkBlock(req.Context, dagserv, nd)
o.WithLocality = true o.WithLocality = true
...@@ -321,7 +327,7 @@ var filesCpCmd = &oldcmds.Command{ ...@@ -321,7 +327,7 @@ var filesCpCmd = &oldcmds.Command{
dst += gopath.Base(src) dst += gopath.Base(src)
} }
nd, err := getNodeFromPath(req.Context(), node, src) nd, err := getNodeFromPath(req.Context(), node, node.DAG, src)
if err != nil { if err != nil {
res.SetError(err, cmdkit.ErrNormal) res.SetError(err, cmdkit.ErrNormal)
return return
...@@ -345,7 +351,7 @@ var filesCpCmd = &oldcmds.Command{ ...@@ -345,7 +351,7 @@ var filesCpCmd = &oldcmds.Command{
}, },
} }
func getNodeFromPath(ctx context.Context, node *core.IpfsNode, p string) (ipld.Node, error) { func getNodeFromPath(ctx context.Context, node *core.IpfsNode, dagservice ipld.DAGService, p string) (ipld.Node, error) {
switch { switch {
case strings.HasPrefix(p, "/ipfs/"): case strings.HasPrefix(p, "/ipfs/"):
np, err := path.ParsePath(p) np, err := path.ParsePath(p)
...@@ -354,7 +360,7 @@ func getNodeFromPath(ctx context.Context, node *core.IpfsNode, p string) (ipld.N ...@@ -354,7 +360,7 @@ func getNodeFromPath(ctx context.Context, node *core.IpfsNode, p string) (ipld.N
} }
resolver := &resolver.Resolver{ resolver := &resolver.Resolver{
DAG: node.DAG, DAG: dagservice,
ResolveOnce: uio.ResolveUnixfsOnce, ResolveOnce: uio.ResolveUnixfsOnce,
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论