diff --git a/core/coreunix/add.go b/core/coreunix/add.go index 8ebc0cb0b..a01097b69 100644 --- a/core/coreunix/add.go +++ b/core/coreunix/add.go @@ -4,7 +4,7 @@ import ( "errors" "io" "os" - "path" + gopath "path" "github.com/jbenet/go-ipfs/commands/files" core "github.com/jbenet/go-ipfs/core" @@ -14,14 +14,13 @@ import ( "github.com/jbenet/go-ipfs/pin" "github.com/jbenet/go-ipfs/thirdparty/eventlog" unixfs "github.com/jbenet/go-ipfs/unixfs" - u "github.com/jbenet/go-ipfs/util" ) var log = eventlog.Logger("coreunix") // Add builds a merkledag from the a reader, pinning all objects to the local // datastore. Returns a key representing the root node. -func Add(n *core.IpfsNode, r io.Reader) (u.Key, error) { +func Add(n *core.IpfsNode, r io.Reader) (string, error) { // TODO more attractive function signature importer.BuildDagFromReader dagNode, err := importer.BuildDagFromReader( r, @@ -35,7 +34,12 @@ func Add(n *core.IpfsNode, r io.Reader) (u.Key, error) { if err := n.Pinning.Flush(); err != nil { return "", err } - return dagNode.Key() + k, err := dagNode.Key() + if err != nil { + return "", err + } + + return k.String(), nil } // AddR recursively adds files in |path|. @@ -124,7 +128,7 @@ Loop: return nil, err } - _, name := path.Split(file.FileName()) + _, name := gopath.Split(file.FileName()) err = tree.AddNodeLink(name, node) if err != nil { diff --git a/core/coreunix/cat.go b/core/coreunix/cat.go index 464d1c608..4f094cfb3 100644 --- a/core/coreunix/cat.go +++ b/core/coreunix/cat.go @@ -8,7 +8,8 @@ import ( uio "github.com/jbenet/go-ipfs/unixfs/io" ) -func Cat(n *core.IpfsNode, p path.Path) (io.Reader, error) { +func Cat(n *core.IpfsNode, pstr string) (io.Reader, error) { + p := path.FromString(pstr) dagNode, err := n.Resolver.ResolvePath(p) if err != nil { return nil, err diff --git a/path/path.go b/path/path.go index bfbef7234..c76844b1e 100644 --- a/path/path.go +++ b/path/path.go @@ -3,12 +3,24 @@ package path import ( "path" "strings" + + u "github.com/jbenet/go-ipfs/util" ) // TODO: debate making this a private struct wrapped in a public interface // would allow us to control creation, and cache segments. type Path string +// FromString safely converts a string type to a Path type +func FromString(s string) Path { + return Path(s) +} + +// FromKey safely converts a Key type to a Path type +func FromKey(k u.Key) Path { + return Path(k.String()) +} + func (p Path) Segments() []string { cleaned := path.Clean(string(p)) segments := strings.Split(cleaned, "/") diff --git a/test/integration/addcat_test.go b/test/integration/addcat_test.go index ac166448e..98936e5cd 100644 --- a/test/integration/addcat_test.go +++ b/test/integration/addcat_test.go @@ -15,7 +15,6 @@ import ( coreunix "github.com/jbenet/go-ipfs/core/coreunix" mocknet "github.com/jbenet/go-ipfs/p2p/net/mock" "github.com/jbenet/go-ipfs/p2p/peer" - path "github.com/jbenet/go-ipfs/path" "github.com/jbenet/go-ipfs/thirdparty/unit" errors "github.com/jbenet/go-ipfs/util/debugerror" testutil "github.com/jbenet/go-ipfs/util/testutil" @@ -126,12 +125,12 @@ func DirectAddCat(data []byte, conf testutil.LatencyConfig) error { return err } - keyAdded, err := coreunix.Add(adder, bytes.NewReader(data)) + added, err := coreunix.Add(adder, bytes.NewReader(data)) if err != nil { return err } - readerCatted, err := coreunix.Cat(catter, path.Path(keyAdded.String())) + readerCatted, err := coreunix.Cat(catter, added) if err != nil { return err } diff --git a/test/integration/three_legged_cat_test.go b/test/integration/three_legged_cat_test.go index 0165a8d75..9dae99eff 100644 --- a/test/integration/three_legged_cat_test.go +++ b/test/integration/three_legged_cat_test.go @@ -12,7 +12,6 @@ import ( coreunix "github.com/jbenet/go-ipfs/core/coreunix" mocknet "github.com/jbenet/go-ipfs/p2p/net/mock" "github.com/jbenet/go-ipfs/p2p/peer" - path "github.com/jbenet/go-ipfs/path" "github.com/jbenet/go-ipfs/thirdparty/unit" errors "github.com/jbenet/go-ipfs/util/debugerror" testutil "github.com/jbenet/go-ipfs/util/testutil" @@ -106,12 +105,12 @@ func RunThreeLeggedCat(data []byte, conf testutil.LatencyConfig) error { return err } - keyAdded, err := coreunix.Add(adder, bytes.NewReader(data)) + added, err := coreunix.Add(adder, bytes.NewReader(data)) if err != nil { return err } - readerCatted, err := coreunix.Cat(catter, path.Path(keyAdded.String())) + readerCatted, err := coreunix.Cat(catter, added) if err != nil { return err }