diff --git a/core/commands/refs.go b/core/commands/refs.go index d63786f87..9a006cb8d 100644 --- a/core/commands/refs.go +++ b/core/commands/refs.go @@ -9,6 +9,7 @@ import ( core "github.com/ipfs/go-ipfs/core" cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv" + "github.com/ipfs/go-ipfs/namesys/resolve" cid "github.com/ipfs/go-cid" cidenc "github.com/ipfs/go-cidutil/cidenc" @@ -173,7 +174,7 @@ func objectsForPaths(ctx context.Context, n *core.IpfsNode, paths []string) ([]i return nil, err } - o, err := core.Resolve(ctx, n.Namesys, n.Resolver, p) + o, err := resolve.Resolve(ctx, n.Namesys, n.Resolver, p) if err != nil { return nil, err } diff --git a/core/commands/tar.go b/core/commands/tar.go index 488193f18..d10c97fdd 100644 --- a/core/commands/tar.go +++ b/core/commands/tar.go @@ -4,8 +4,8 @@ import ( "fmt" "io" - "github.com/ipfs/go-ipfs/core" "github.com/ipfs/go-ipfs/core/commands/cmdenv" + "github.com/ipfs/go-ipfs/namesys/resolve" tar "github.com/ipfs/go-ipfs/tar" "github.com/ipfs/go-ipfs-cmdkit" @@ -97,7 +97,7 @@ var tarCatCmd = &cmds.Command{ return err } - root, err := core.Resolve(req.Context, nd.Namesys, nd.Resolver, p) + root, err := resolve.Resolve(req.Context, nd.Namesys, nd.Resolver, p) if err != nil { return err } diff --git a/core/coreapi/path.go b/core/coreapi/path.go index 4c7837f36..d78650278 100644 --- a/core/coreapi/path.go +++ b/core/coreapi/path.go @@ -5,7 +5,7 @@ import ( "fmt" gopath "path" - "github.com/ipfs/go-ipfs/core" + node2 "github.com/ipfs/go-ipfs/namesys/resolve" "github.com/ipfs/go-cid" ipld "github.com/ipfs/go-ipld-format" @@ -42,8 +42,8 @@ func (api *CoreAPI) ResolvePath(ctx context.Context, p path.Path) (path.Resolved } ipath := ipfspath.Path(p.String()) - ipath, err := core.ResolveIPNS(ctx, api.namesys, ipath) - if err == core.ErrNoNamesys { + ipath, err := node2.ResolveIPNS(ctx, api.namesys, ipath) + if err == node2.ErrNoNamesys { return nil, coreiface.ErrOffline } else if err != nil { return nil, err diff --git a/core/corehttp/gateway_handler.go b/core/corehttp/gateway_handler.go index cdbcce594..72566930b 100644 --- a/core/corehttp/gateway_handler.go +++ b/core/corehttp/gateway_handler.go @@ -14,6 +14,7 @@ import ( "github.com/ipfs/go-ipfs/core" "github.com/ipfs/go-ipfs/dagutils" + "github.com/ipfs/go-ipfs/namesys/resolve" "github.com/dustin/go-humanize" "github.com/ipfs/go-cid" @@ -423,7 +424,7 @@ func (i *gatewayHandler) putHandler(w http.ResponseWriter, r *http.Request) { } var newcid cid.Cid - rnode, err := core.Resolve(ctx, i.node.Namesys, i.node.Resolver, rootPath) + rnode, err := resolve.Resolve(ctx, i.node.Namesys, i.node.Resolver, rootPath) switch ev := err.(type) { case resolver.ErrNoLink: // ev.Node < node where resolve failed diff --git a/fuse/ipns/ipns_unix.go b/fuse/ipns/ipns_unix.go index d9f6c6740..fb56d8353 100644 --- a/fuse/ipns/ipns_unix.go +++ b/fuse/ipns/ipns_unix.go @@ -13,6 +13,8 @@ import ( core "github.com/ipfs/go-ipfs/core" namesys "github.com/ipfs/go-ipfs/namesys" + node2 "github.com/ipfs/go-ipfs/namesys/resolve" + dag "github.com/ipfs/go-merkledag" path "github.com/ipfs/go-path" ft "github.com/ipfs/go-unixfs" @@ -96,7 +98,7 @@ func loadRoot(ctx context.Context, rt *keyRoot, ipfs *core.IpfsNode, name string return nil, err } - node, err := core.Resolve(ctx, ipfs.Namesys, ipfs.Resolver, p) + node, err := node2.Resolve(ctx, ipfs.Namesys, ipfs.Resolver, p) switch err { case nil: case namesys.ErrResolveFailed: diff --git a/core/pathresolver_test.go b/namesys/resolve/pathresolver_test.go similarity index 63% rename from core/pathresolver_test.go rename to namesys/resolve/pathresolver_test.go index 92318f275..fe578b5d3 100644 --- a/core/pathresolver_test.go +++ b/namesys/resolve/pathresolver_test.go @@ -1,10 +1,11 @@ -package core_test +package resolve_test import ( "testing" - core "github.com/ipfs/go-ipfs/core" coremock "github.com/ipfs/go-ipfs/core/mock" + "github.com/ipfs/go-ipfs/namesys/resolve" + path "github.com/ipfs/go-path" ) @@ -14,17 +15,17 @@ func TestResolveNoComponents(t *testing.T) { t.Fatal("Should have constructed a mock node", err) } - _, err = core.Resolve(n.Context(), n.Namesys, n.Resolver, path.Path("/ipns/")) + _, err = resolve.Resolve(n.Context(), n.Namesys, n.Resolver, path.Path("/ipns/")) if err != path.ErrNoComponents { t.Fatal("Should error with no components (/ipns/).", err) } - _, err = core.Resolve(n.Context(), n.Namesys, n.Resolver, path.Path("/ipfs/")) + _, err = resolve.Resolve(n.Context(), n.Namesys, n.Resolver, path.Path("/ipfs/")) if err != path.ErrNoComponents { t.Fatal("Should error with no components (/ipfs/).", err) } - _, err = core.Resolve(n.Context(), n.Namesys, n.Resolver, path.Path("/../..")) + _, err = resolve.Resolve(n.Context(), n.Namesys, n.Resolver, path.Path("/../..")) if err != path.ErrBadPath { t.Fatal("Should error with invalid path.", err) } diff --git a/core/pathresolver.go b/namesys/resolve/resolve.go similarity index 74% rename from core/pathresolver.go rename to namesys/resolve/resolve.go index 21c2a84be..bd1667fa4 100644 --- a/core/pathresolver.go +++ b/namesys/resolve/resolve.go @@ -1,18 +1,21 @@ -package core +package resolve import ( "context" "errors" "strings" - namesys "github.com/ipfs/go-ipfs/namesys" - - ipld "github.com/ipfs/go-ipld-format" + "github.com/ipfs/go-ipld-format" + log2 "github.com/ipfs/go-log" logging "github.com/ipfs/go-log" - path "github.com/ipfs/go-path" - resolver "github.com/ipfs/go-path/resolver" + "github.com/ipfs/go-path" + "github.com/ipfs/go-path/resolver" + + "github.com/ipfs/go-ipfs/namesys" ) +var log = logging.Logger("nsresolv") + // ErrNoNamesys is an explicit error for when an IPFS node doesn't // (yet) have a name system var ErrNoNamesys = errors.New( @@ -27,34 +30,34 @@ func ResolveIPNS(ctx context.Context, nsys namesys.NameSystem, p path.Path) (pat // TODO(cryptix): we should be able to query the local cache for the path if nsys == nil { - evt.Append(logging.LoggableMap{"error": ErrNoNamesys.Error()}) + evt.Append(log2.LoggableMap{"error": ErrNoNamesys.Error()}) return "", ErrNoNamesys } seg := p.Segments() if len(seg) < 2 || seg[1] == "" { // just "/" without further segments - evt.Append(logging.LoggableMap{"error": path.ErrNoComponents.Error()}) + evt.Append(log2.LoggableMap{"error": path.ErrNoComponents.Error()}) return "", path.ErrNoComponents } extensions := seg[2:] resolvable, err := path.FromSegments("/", seg[0], seg[1]) if err != nil { - evt.Append(logging.LoggableMap{"error": err.Error()}) + evt.Append(log2.LoggableMap{"error": err.Error()}) return "", err } respath, err := nsys.Resolve(ctx, resolvable.String()) if err != nil { - evt.Append(logging.LoggableMap{"error": err.Error()}) + evt.Append(log2.LoggableMap{"error": err.Error()}) return "", err } segments := append(respath.Segments(), extensions...) p, err = path.FromSegments("/", segments...) if err != nil { - evt.Append(logging.LoggableMap{"error": err.Error()}) + evt.Append(log2.LoggableMap{"error": err.Error()}) return "", err } } @@ -64,7 +67,7 @@ func ResolveIPNS(ctx context.Context, nsys namesys.NameSystem, p path.Path) (pat // Resolve resolves the given path by parsing out protocol-specific // entries (e.g. /ipns/) and then going through the /ipfs/ // entries and returning the final node. -func Resolve(ctx context.Context, nsys namesys.NameSystem, r *resolver.Resolver, p path.Path) (ipld.Node, error) { +func Resolve(ctx context.Context, nsys namesys.NameSystem, r *resolver.Resolver, p path.Path) (format.Node, error) { p, err := ResolveIPNS(ctx, nsys, p) if err != nil { return nil, err