提交 1d23bbeb 作者: Łukasz Magiera

coreapi: path review

License: MIT
Signed-off-by: 's avatarŁukasz Magiera <magik6k@gmail.com>
上级 9b288560
......@@ -2,8 +2,8 @@ package coreapi
import (
context "context"
fmt "fmt"
gopath "path"
strings "strings"
core "github.com/ipfs/go-ipfs/core"
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
......@@ -87,9 +87,15 @@ func resolvePath(ctx context.Context, ng ipld.NodeGetter, nsys namesys.NameSyste
return nil, err
}
resolveOnce := uio.ResolveUnixfsOnce
if strings.HasPrefix(ipath.String(), "/ipld") {
var resolveOnce resolver.ResolveOnce
switch p.Namespace() {
case "ipfs":
resolveOnce = uio.ResolveUnixfsOnce
case "ipld":
resolveOnce = resolver.ResolveSingle
default:
return nil, fmt.Errorf("unsupported path namespace: %s", p.Namespace())
}
r := &resolver.Resolver{
......@@ -131,7 +137,7 @@ func (p *path) String() string {
func (p *path) Namespace() string {
if len(p.path.Segments()) < 1 {
return ""
panic("path without namespace") //this shouldn't happen under any scenario
}
return p.path.Segments()[0]
}
......
......@@ -34,6 +34,9 @@ func (e ErrNoLink) Error() string {
return fmt.Sprintf("no link named %q under %s", e.Name, e.Node.String())
}
// ResolveOnce resolves path through a single node
type ResolveOnce func(ctx context.Context, ds ipld.NodeGetter, nd ipld.Node, names []string) (*ipld.Link, []string, error)
// Resolver provides path resolution to IPFS
// It has a pointer to a DAGService, which is uses to resolve nodes.
// TODO: now that this is more modular, try to unify this code with the
......@@ -41,7 +44,7 @@ func (e ErrNoLink) Error() string {
type Resolver struct {
DAG ipld.NodeGetter
ResolveOnce func(ctx context.Context, ds ipld.NodeGetter, nd ipld.Node, names []string) (*ipld.Link, []string, error)
ResolveOnce ResolveOnce
}
// NewBasicResolver constructs a new basic resolver.
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论