From eddd64119edbcaadc7e1de03e7134976bf2c8c1c Mon Sep 17 00:00:00 2001 From: Matt Bell Date: Sun, 6 Sep 2015 12:49:25 -0700 Subject: [PATCH] Resolve '/ipfs/root/some/path' paths in 'ipfs resolve' command License: MIT Signed-off-by: Matt Bell --- core/commands/resolve.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/core/commands/resolve.go b/core/commands/resolve.go index e8c25a4c1..8917f2404 100644 --- a/core/commands/resolve.go +++ b/core/commands/resolve.go @@ -5,6 +5,7 @@ import ( "strings" cmds "github.com/ipfs/go-ipfs/commands" + context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context" namesys "github.com/ipfs/go-ipfs/namesys" path "github.com/ipfs/go-ipfs/path" u "github.com/ipfs/go-ipfs/util" @@ -78,6 +79,16 @@ Resolve the value of another name recursively: depth = namesys.DefaultDepthLimit } + if strings.HasPrefix(name, "/ipfs/") || !strings.HasPrefix(name, "/") { + resolved, err := resolveIpfsPath(req.Context(), n.Resolver, name) + if err != nil { + res.SetError(err, cmds.ErrNormal) + return + } + res.SetOutput(&ResolvedPath{resolved}) + return + } + output, err := n.Namesys.ResolveN(req.Context(), name, depth) if err != nil { res.SetError(err, cmds.ErrNormal) @@ -97,3 +108,22 @@ Resolve the value of another name recursively: }, Type: ResolvedPath{}, } + +func resolveIpfsPath (ctx context.Context, r *path.Resolver, name string) (path.Path, error) { + p, err := path.ParsePath(name) + if err != nil { + return "", err + } + + node, err := r.ResolvePath(ctx, p) + if err != nil { + return "", err + } + + key, err := node.Key() + if err != nil { + return "", err + } + + return path.FromKey(key), nil +}