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