diff --git a/assets/assets.go b/assets/assets.go index 55d168bc4..56437dfa1 100644 --- a/assets/assets.go +++ b/assets/assets.go @@ -13,8 +13,8 @@ import ( cid "github.com/ipfs/go-cid" files "github.com/ipfs/go-ipfs-files" - iface "github.com/ipfs/interface-go-ipfs-core" options "github.com/ipfs/interface-go-ipfs-core/options" + "github.com/ipfs/interface-go-ipfs-core/path" // this import keeps gx from thinking the dep isn't used _ "github.com/ipfs/dir-index-html" @@ -57,7 +57,7 @@ func addAssetList(nd *core.IpfsNode, l []string) (cid.Cid, error) { return cid.Cid{}, err } - basePath := iface.IpfsPath(dirb.Cid()) + basePath := path.IpfsPath(dirb.Cid()) for _, p := range l { d, err := Asset(p) diff --git a/core/commands/block.go b/core/commands/block.go index 6e6b24afc..796ce72e8 100644 --- a/core/commands/block.go +++ b/core/commands/block.go @@ -11,8 +11,8 @@ import ( cmdkit "github.com/ipfs/go-ipfs-cmdkit" cmds "github.com/ipfs/go-ipfs-cmds" - coreiface "github.com/ipfs/interface-go-ipfs-core" options "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" mh "github.com/multiformats/go-multihash" ) @@ -65,12 +65,7 @@ on raw IPFS blocks. It outputs the following to stdout: return err } - p, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } - - b, err := api.Block().Stat(req.Context, p) + b, err := api.Block().Stat(req.Context, path.New(req.Arguments[0])) if err != nil { return err } @@ -107,12 +102,7 @@ It outputs to stdout, and is a base58 encoded multihash. return err } - p, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } - - r, err := api.Block().Get(req.Context, p) + r, err := api.Block().Get(req.Context, path.New(req.Arguments[0])) if err != nil { return err } @@ -234,15 +224,7 @@ It takes a list of base58 encoded multihashes to remove. // TODO: use batching coreapi when done for _, b := range req.Arguments { - p, err := coreiface.ParsePath(b) - if err != nil { - return err - } - - rp, err := api.ResolvePath(req.Context, p) - if err != nil { - return err - } + rp, err := api.ResolvePath(req.Context, path.New(b)) err = api.Block().Rm(req.Context, rp, options.Block.Force(force)) if err != nil { diff --git a/core/commands/cat.go b/core/commands/cat.go index 3fe5ee7bf..1032523b5 100644 --- a/core/commands/cat.go +++ b/core/commands/cat.go @@ -12,6 +12,7 @@ import ( cmds "github.com/ipfs/go-ipfs-cmds" "github.com/ipfs/go-ipfs-files" "github.com/ipfs/interface-go-ipfs-core" + "github.com/ipfs/interface-go-ipfs-core/path" ) const ( @@ -118,12 +119,7 @@ func cat(ctx context.Context, api iface.CoreAPI, paths []string, offset int64, m return nil, 0, nil } for _, p := range paths { - fpath, err := iface.ParsePath(p) - if err != nil { - return nil, 0, err - } - - f, err := api.Unixfs().Get(ctx, fpath) + f, err := api.Unixfs().Get(ctx, path.New(p)) if err != nil { return nil, 0, err } diff --git a/core/commands/dag/dag.go b/core/commands/dag/dag.go index e6958f8ce..66b6dde35 100644 --- a/core/commands/dag/dag.go +++ b/core/commands/dag/dag.go @@ -15,8 +15,8 @@ import ( cmds "github.com/ipfs/go-ipfs-cmds" files "github.com/ipfs/go-ipfs-files" ipld "github.com/ipfs/go-ipld-format" - path "github.com/ipfs/go-path" - iface "github.com/ipfs/interface-go-ipfs-core" + ipfspath "github.com/ipfs/go-path" + path "github.com/ipfs/interface-go-ipfs-core/path" mh "github.com/multiformats/go-multihash" ) @@ -160,12 +160,7 @@ format. return err } - p, err := iface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } - - rp, err := api.ResolvePath(req.Context, p) + rp, err := api.ResolvePath(req.Context, path.New(req.Arguments[0])) if err != nil { return err } @@ -205,12 +200,7 @@ var DagResolveCmd = &cmds.Command{ return err } - p, err := iface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } - - rp, err := api.ResolvePath(req.Context, p) + rp, err := api.ResolvePath(req.Context, path.New(req.Arguments[0])) if err != nil { return err } @@ -243,7 +233,7 @@ var DagResolveCmd = &cmds.Command{ } p := enc.Encode(out.Cid) if out.RemPath != "" { - p = path.Join([]string{p, out.RemPath}) + p = ipfspath.Join([]string{p, out.RemPath}) } fmt.Fprint(w, p) diff --git a/core/commands/files.go b/core/commands/files.go index 928434d72..700a78bc7 100644 --- a/core/commands/files.go +++ b/core/commands/files.go @@ -26,6 +26,7 @@ import ( "github.com/ipfs/go-mfs" ft "github.com/ipfs/go-unixfs" "github.com/ipfs/interface-go-ipfs-core" + path "github.com/ipfs/interface-go-ipfs-core/path" mh "github.com/multiformats/go-multihash" ) @@ -363,12 +364,7 @@ var filesCpCmd = &cmds.Command{ func getNodeFromPath(ctx context.Context, node *core.IpfsNode, api iface.CoreAPI, p string) (ipld.Node, error) { switch { case strings.HasPrefix(p, "/ipfs/"): - np, err := iface.ParsePath(p) - if err != nil { - return nil, err - } - - return api.ResolveNode(ctx, np) + return api.ResolveNode(ctx, path.New(p)) default: fsn, err := mfs.Lookup(node.FilesRoot, p) if err != nil { diff --git a/core/commands/get.go b/core/commands/get.go index b73aa5cbd..8dfc7359e 100644 --- a/core/commands/get.go +++ b/core/commands/get.go @@ -7,7 +7,7 @@ import ( "fmt" "io" "os" - "path" + gopath "path" "path/filepath" "strings" @@ -17,7 +17,7 @@ import ( cmdkit "github.com/ipfs/go-ipfs-cmdkit" cmds "github.com/ipfs/go-ipfs-cmds" files "github.com/ipfs/go-ipfs-files" - iface "github.com/ipfs/interface-go-ipfs-core" + "github.com/ipfs/interface-go-ipfs-core/path" "github.com/whyrusleeping/tar-utils" "gopkg.in/cheggaaa/pb.v1" ) @@ -71,10 +71,7 @@ may also specify the level of compression by specifying '-l=<1-9>'. return err } - p, err := iface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } + p := path.New(req.Arguments[0]) file, err := api.Unixfs().Get(req.Context, p) if err != nil { @@ -267,8 +264,8 @@ func (i *identityWriteCloser) Close() error { } func fileArchive(f files.Node, name string, archive bool, compression int) (io.Reader, error) { - cleaned := path.Clean(name) - _, filename := path.Split(cleaned) + cleaned := gopath.Clean(name) + _, filename := gopath.Split(cleaned) // need to connect a writer to a reader piper, pipew := io.Pipe() diff --git a/core/commands/ls.go b/core/commands/ls.go index 0289d69fd..c755e25d5 100644 --- a/core/commands/ls.go +++ b/core/commands/ls.go @@ -15,6 +15,7 @@ import ( unixfs_pb "github.com/ipfs/go-unixfs/pb" iface "github.com/ipfs/interface-go-ipfs-core" options "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" ) // LsLink contains printable data for a single ipld link in ls output @@ -131,12 +132,7 @@ The JSON output contains type information. } for i, fpath := range paths { - p, err := iface.ParsePath(fpath) - if err != nil { - return err - } - - results, err := api.Unixfs().Ls(req.Context, p, + results, err := api.Unixfs().Ls(req.Context, path.New(fpath), options.Unixfs.ResolveChildren(resolveSize || resolveType)) if err != nil { return err diff --git a/core/commands/name/publish.go b/core/commands/name/publish.go index 74bb3bd83..b2643dcf4 100644 --- a/core/commands/name/publish.go +++ b/core/commands/name/publish.go @@ -12,6 +12,7 @@ import ( cmds "github.com/ipfs/go-ipfs-cmds" iface "github.com/ipfs/interface-go-ipfs-core" options "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" ) var ( @@ -112,10 +113,7 @@ Alternatively, publish an using a valid PeerID (as listed by opts = append(opts, options.Name.TTL(d)) } - p, err := iface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } + p := path.New(req.Arguments[0]) if verifyExists, _ := req.Options[resolveOptionName].(bool); verifyExists { _, err := api.ResolveNode(req.Context, p) diff --git a/core/commands/object/diff.go b/core/commands/object/diff.go index 4e02110d7..166035ff4 100644 --- a/core/commands/object/diff.go +++ b/core/commands/object/diff.go @@ -9,7 +9,7 @@ import ( cmdkit "github.com/ipfs/go-ipfs-cmdkit" cmds "github.com/ipfs/go-ipfs-cmds" - coreiface "github.com/ipfs/interface-go-ipfs-core" + path "github.com/ipfs/interface-go-ipfs-core/path" ) const ( @@ -60,18 +60,8 @@ Example: return err } - a := req.Arguments[0] - b := req.Arguments[1] - - pa, err := coreiface.ParsePath(a) - if err != nil { - return err - } - - pb, err := coreiface.ParsePath(b) - if err != nil { - return err - } + pa := path.New(req.Arguments[0]) + pb := path.New(req.Arguments[1]) changes, err := api.Object().Diff(req.Context, pa, pb) if err != nil { diff --git a/core/commands/object/object.go b/core/commands/object/object.go index 76dc91291..dc59b61da 100644 --- a/core/commands/object/object.go +++ b/core/commands/object/object.go @@ -15,8 +15,8 @@ import ( "github.com/ipfs/go-ipfs-cmds" ipld "github.com/ipfs/go-ipld-format" dag "github.com/ipfs/go-merkledag" - coreiface "github.com/ipfs/interface-go-ipfs-core" "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" ) type Node struct { @@ -91,10 +91,7 @@ is the raw data of the object. return err } - path, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } + path := path.New(req.Arguments[0]) data, err := api.Object().Data(req.Context, path) if err != nil { @@ -133,10 +130,7 @@ multihash. return err } - path, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } + path := path.New(req.Arguments[0]) rp, err := api.ResolvePath(req.Context, path) if err != nil { @@ -228,10 +222,7 @@ Supported values are: return err } - path, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } + path := path.New(req.Arguments[0]) datafieldenc, _ := req.Options[encodingOptionName].(string) if err != nil { @@ -323,12 +314,7 @@ var ObjectStatCmd = &cmds.Command{ return err } - path, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } - - ns, err := api.Object().Stat(req.Context, path) + ns, err := api.Object().Stat(req.Context, path.New(req.Arguments[0])) if err != nil { return err } diff --git a/core/commands/object/patch.go b/core/commands/object/patch.go index 9f87a3798..8b55a70ea 100644 --- a/core/commands/object/patch.go +++ b/core/commands/object/patch.go @@ -8,8 +8,8 @@ import ( "github.com/ipfs/go-ipfs-cmdkit" "github.com/ipfs/go-ipfs-cmds" - coreiface "github.com/ipfs/interface-go-ipfs-core" "github.com/ipfs/interface-go-ipfs-core/options" + "github.com/ipfs/interface-go-ipfs-core/path" ) var ObjectPatchCmd = &cmds.Command{ @@ -55,10 +55,7 @@ the limit will not be respected by the network. return err } - root, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } + root := path.New(req.Arguments[0]) file, err := cmdenv.GetFileArg(req.Files.Entries()) if err != nil { @@ -102,10 +99,7 @@ Example: return err } - root, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } + root := path.New(req.Arguments[0]) file, err := cmdenv.GetFileArg(req.Files.Entries()) if err != nil { @@ -145,10 +139,7 @@ Remove a Merkle-link from the given object and return the hash of the result. return err } - root, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } + root := path.New(req.Arguments[0]) name := req.Arguments[1] p, err := api.Object().RmLink(req.Context, root, name) @@ -201,17 +192,9 @@ to a file containing 'bar', and returns the hash of the new object. return err } - root, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } - + root := path.New(req.Arguments[0]) name := req.Arguments[1] - - child, err := coreiface.ParsePath(req.Arguments[2]) - if err != nil { - return err - } + child := path.New(req.Arguments[2]) create, _ := req.Options[createOptionName].(bool) if err != nil { diff --git a/core/commands/pin.go b/core/commands/pin.go index 0379f1635..ba594de7d 100644 --- a/core/commands/pin.go +++ b/core/commands/pin.go @@ -22,6 +22,7 @@ import ( verifcid "github.com/ipfs/go-verifcid" coreiface "github.com/ipfs/interface-go-ipfs-core" options "github.com/ipfs/interface-go-ipfs-core/options" + "github.com/ipfs/interface-go-ipfs-core/path" ) var PinCmd = &cmds.Command{ @@ -183,12 +184,7 @@ var addPinCmd = &cmds.Command{ func pinAddMany(ctx context.Context, api coreiface.CoreAPI, enc cidenc.Encoder, paths []string, recursive bool) ([]string, error) { added := make([]string, len(paths)) for i, b := range paths { - p, err := coreiface.ParsePath(b) - if err != nil { - return nil, err - } - - rp, err := api.ResolvePath(ctx, p) + rp, err := api.ResolvePath(ctx, path.New(b)) if err != nil { return nil, err } @@ -238,12 +234,7 @@ collected if needed. (By default, recursively. Use -r=false for direct pins.) pins := make([]string, 0, len(req.Arguments)) for _, b := range req.Arguments { - p, err := coreiface.ParsePath(b) - if err != nil { - return err - } - - rp, err := api.ResolvePath(req.Context, p) + rp, err := api.ResolvePath(req.Context, path.New(b)) if err != nil { return err } @@ -417,15 +408,8 @@ new pin and removing the old one. unpin, _ := req.Options[pinUnpinOptionName].(bool) - from, err := coreiface.ParsePath(req.Arguments[0]) - if err != nil { - return err - } - - to, err := coreiface.ParsePath(req.Arguments[1]) - if err != nil { - return err - } + from := path.New(req.Arguments[0]) + to := path.New(req.Arguments[1]) err = api.Pin().Update(req.Context, from, to, options.Pin.Unpin(unpin)) if err != nil { @@ -514,12 +498,7 @@ func pinLsKeys(ctx context.Context, args []string, typeStr string, n *core.IpfsN keys := make(map[cid.Cid]RefKeyObject) for _, p := range args { - pth, err := coreiface.ParsePath(p) - if err != nil { - return nil, err - } - - c, err := api.ResolvePath(ctx, pth) + c, err := api.ResolvePath(ctx, path.New(p)) if err != nil { return nil, err } diff --git a/core/commands/resolve.go b/core/commands/resolve.go index bc6f8850a..6de05e1f2 100644 --- a/core/commands/resolve.go +++ b/core/commands/resolve.go @@ -14,10 +14,10 @@ import ( cidenc "github.com/ipfs/go-cidutil/cidenc" cmdkit "github.com/ipfs/go-ipfs-cmdkit" cmds "github.com/ipfs/go-ipfs-cmds" - path "github.com/ipfs/go-path" - coreiface "github.com/ipfs/interface-go-ipfs-core" + ipfspath "github.com/ipfs/go-path" options "github.com/ipfs/interface-go-ipfs-core/options" nsopts "github.com/ipfs/interface-go-ipfs-core/options/namesys" + path "github.com/ipfs/interface-go-ipfs-core/path" ) const ( @@ -126,16 +126,11 @@ Resolve the value of an IPFS DAG path: if err != nil && err != ns.ErrResolveRecursion { return err } - return cmds.EmitOnce(res, &ncmd.ResolvedPath{Path: path.Path(p.String())}) + return cmds.EmitOnce(res, &ncmd.ResolvedPath{Path: ipfspath.Path(p.String())}) } // else, ipfs path or ipns with recursive flag - p, err := coreiface.ParsePath(name) - if err != nil { - return err - } - - rp, err := api.ResolvePath(req.Context, p) + rp, err := api.ResolvePath(req.Context, path.New(name)) if err != nil { return err } @@ -145,7 +140,7 @@ Resolve the value of an IPFS DAG path: encoded += "/" + remainder } - return cmds.EmitOnce(res, &ncmd.ResolvedPath{Path: path.Path(encoded)}) + return cmds.EmitOnce(res, &ncmd.ResolvedPath{Path: ipfspath.Path(encoded)}) }, Encoders: cmds.EncoderMap{ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, rp *ncmd.ResolvedPath) error { diff --git a/core/commands/unixfs/ls.go b/core/commands/unixfs/ls.go index 76223d1fa..2ca71ccb0 100644 --- a/core/commands/unixfs/ls.go +++ b/core/commands/unixfs/ls.go @@ -12,7 +12,7 @@ import ( cmds "github.com/ipfs/go-ipfs-cmds" merkledag "github.com/ipfs/go-merkledag" unixfs "github.com/ipfs/go-unixfs" - iface "github.com/ipfs/interface-go-ipfs-core" + path "github.com/ipfs/interface-go-ipfs-core/path" ) type LsLink struct { @@ -96,12 +96,7 @@ possible, please use 'ipfs ls' instead. for _, p := range paths { ctx := req.Context - fpath, err := iface.ParsePath(p) - if err != nil { - return err - } - - merkleNode, err := api.ResolveNode(ctx, fpath) + merkleNode, err := api.ResolveNode(ctx, path.New(p)) if err != nil { return err } diff --git a/core/coreapi/block.go b/core/coreapi/block.go index 10aa0fcb2..79b89ed02 100644 --- a/core/coreapi/block.go +++ b/core/coreapi/block.go @@ -14,12 +14,13 @@ import ( cid "github.com/ipfs/go-cid" coreiface "github.com/ipfs/interface-go-ipfs-core" caopts "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" ) type BlockAPI CoreAPI type BlockStat struct { - path coreiface.ResolvedPath + path path.Resolved size int } @@ -57,10 +58,10 @@ func (api *BlockAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Bloc api.pinning.PinWithMode(b.Cid(), pin.Recursive) } - return &BlockStat{path: coreiface.IpldPath(b.Cid()), size: len(data)}, nil + return &BlockStat{path: path.IpldPath(b.Cid()), size: len(data)}, nil } -func (api *BlockAPI) Get(ctx context.Context, p coreiface.Path) (io.Reader, error) { +func (api *BlockAPI) Get(ctx context.Context, p path.Path) (io.Reader, error) { rp, err := api.core().ResolvePath(ctx, p) if err != nil { return nil, err @@ -74,7 +75,7 @@ func (api *BlockAPI) Get(ctx context.Context, p coreiface.Path) (io.Reader, erro return bytes.NewReader(b.RawData()), nil } -func (api *BlockAPI) Rm(ctx context.Context, p coreiface.Path, opts ...caopts.BlockRmOption) error { +func (api *BlockAPI) Rm(ctx context.Context, p path.Path, opts ...caopts.BlockRmOption) error { rp, err := api.core().ResolvePath(ctx, p) if err != nil { return err @@ -112,7 +113,7 @@ func (api *BlockAPI) Rm(ctx context.Context, p coreiface.Path, opts ...caopts.Bl } } -func (api *BlockAPI) Stat(ctx context.Context, p coreiface.Path) (coreiface.BlockStat, error) { +func (api *BlockAPI) Stat(ctx context.Context, p path.Path) (coreiface.BlockStat, error) { rp, err := api.core().ResolvePath(ctx, p) if err != nil { return nil, err @@ -124,7 +125,7 @@ func (api *BlockAPI) Stat(ctx context.Context, p coreiface.Path) (coreiface.Bloc } return &BlockStat{ - path: coreiface.IpldPath(b.Cid()), + path: path.IpldPath(b.Cid()), size: len(b.RawData()), }, nil } @@ -133,7 +134,7 @@ func (bs *BlockStat) Size() int { return bs.size } -func (bs *BlockStat) Path() coreiface.ResolvedPath { +func (bs *BlockStat) Path() path.Resolved { return bs.path } diff --git a/core/coreapi/dht.go b/core/coreapi/dht.go index 1e040c5dd..c7e0ebc57 100644 --- a/core/coreapi/dht.go +++ b/core/coreapi/dht.go @@ -12,6 +12,7 @@ import ( dag "github.com/ipfs/go-merkledag" coreiface "github.com/ipfs/interface-go-ipfs-core" caopts "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" peer "github.com/libp2p/go-libp2p-peer" pstore "github.com/libp2p/go-libp2p-peerstore" routing "github.com/libp2p/go-libp2p-routing" @@ -33,7 +34,7 @@ func (api *DhtAPI) FindPeer(ctx context.Context, p peer.ID) (pstore.PeerInfo, er return pi, nil } -func (api *DhtAPI) FindProviders(ctx context.Context, p coreiface.Path, opts ...caopts.DhtFindProvidersOption) (<-chan pstore.PeerInfo, error) { +func (api *DhtAPI) FindProviders(ctx context.Context, p path.Path, opts ...caopts.DhtFindProvidersOption) (<-chan pstore.PeerInfo, error) { settings, err := caopts.DhtFindProvidersOptions(opts...) if err != nil { return nil, err @@ -58,7 +59,7 @@ func (api *DhtAPI) FindProviders(ctx context.Context, p coreiface.Path, opts ... return pchan, nil } -func (api *DhtAPI) Provide(ctx context.Context, path coreiface.Path, opts ...caopts.DhtProvideOption) error { +func (api *DhtAPI) Provide(ctx context.Context, path path.Path, opts ...caopts.DhtProvideOption) error { settings, err := caopts.DhtProvideOptions(opts...) if err != nil { return err diff --git a/core/coreapi/key.go b/core/coreapi/key.go index f87639d48..4fea3c5d4 100644 --- a/core/coreapi/key.go +++ b/core/coreapi/key.go @@ -10,6 +10,7 @@ import ( ipfspath "github.com/ipfs/go-path" coreiface "github.com/ipfs/interface-go-ipfs-core" caopts "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" crypto "github.com/libp2p/go-libp2p-crypto" peer "github.com/libp2p/go-libp2p-peer" ) @@ -27,13 +28,8 @@ func (k *key) Name() string { } // Path returns the path of the key. -func (k *key) Path() coreiface.Path { - path, err := coreiface.ParsePath(ipfspath.Join([]string{"/ipns", k.peerID.Pretty()})) - if err != nil { - panic("error parsing path: " + err.Error()) - } - - return path +func (k *key) Path() path.Path { + return path.New(ipfspath.Join([]string{"/ipns", k.peerID.Pretty()})) } // ID returns key PeerID diff --git a/core/coreapi/name.go b/core/coreapi/name.go index 0b368ec54..43ed78b9f 100644 --- a/core/coreapi/name.go +++ b/core/coreapi/name.go @@ -12,6 +12,7 @@ import ( ipath "github.com/ipfs/go-path" coreiface "github.com/ipfs/interface-go-ipfs-core" caopts "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" "github.com/libp2p/go-libp2p-crypto" ci "github.com/libp2p/go-libp2p-crypto" "github.com/libp2p/go-libp2p-peer" @@ -21,7 +22,7 @@ type NameAPI CoreAPI type ipnsEntry struct { name string - value coreiface.Path + value path.Path } // Name returns the ipnsEntry name. @@ -30,12 +31,12 @@ func (e *ipnsEntry) Name() string { } // Value returns the ipnsEntry value. -func (e *ipnsEntry) Value() coreiface.Path { +func (e *ipnsEntry) Value() path.Path { return e.value } // Publish announces new IPNS name and returns the new IPNS entry. -func (api *NameAPI) Publish(ctx context.Context, p coreiface.Path, opts ...caopts.NamePublishOption) (coreiface.IpnsEntry, error) { +func (api *NameAPI) Publish(ctx context.Context, p path.Path, opts ...caopts.NamePublishOption) (coreiface.IpnsEntry, error) { if err := api.checkPublishAllowed(); err != nil { return nil, err } @@ -106,10 +107,8 @@ func (api *NameAPI) Search(ctx context.Context, name string, opts ...caopts.Name go func() { defer close(out) for res := range resolver.ResolveAsync(ctx, name, options.ResolveOpts...) { - p, _ := coreiface.ParsePath(res.Path.String()) - select { - case out <- coreiface.IpnsResult{Path: p, Err: res.Err}: + case out <- coreiface.IpnsResult{Path: path.New(res.Path.String()), Err: res.Err}: case <-ctx.Done(): return } @@ -121,14 +120,14 @@ func (api *NameAPI) Search(ctx context.Context, name string, opts ...caopts.Name // Resolve attempts to resolve the newest version of the specified name and // returns its path. -func (api *NameAPI) Resolve(ctx context.Context, name string, opts ...caopts.NameResolveOption) (coreiface.Path, error) { +func (api *NameAPI) Resolve(ctx context.Context, name string, opts ...caopts.NameResolveOption) (path.Path, error) { results, err := api.Search(ctx, name, opts...) if err != nil { return nil, err } err = coreiface.ErrResolveFailed - var p coreiface.Path + var p path.Path for res := range results { p, err = res.Path, res.Err diff --git a/core/coreapi/object.go b/core/coreapi/object.go index e302696bc..7cbd480c5 100644 --- a/core/coreapi/object.go +++ b/core/coreapi/object.go @@ -20,6 +20,7 @@ import ( ft "github.com/ipfs/go-unixfs" coreiface "github.com/ipfs/interface-go-ipfs-core" caopts "github.com/ipfs/interface-go-ipfs-core/options" + ipath "github.com/ipfs/interface-go-ipfs-core/path" ) const inputLimit = 2 << 20 @@ -57,7 +58,7 @@ func (api *ObjectAPI) New(ctx context.Context, opts ...caopts.ObjectNewOption) ( return n, nil } -func (api *ObjectAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.ObjectPutOption) (coreiface.ResolvedPath, error) { +func (api *ObjectAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.ObjectPutOption) (ipath.Resolved, error) { options, err := caopts.ObjectPutOptions(opts...) if err != nil { return nil, err @@ -134,14 +135,14 @@ func (api *ObjectAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Obj } } - return coreiface.IpfsPath(dagnode.Cid()), nil + return ipath.IpfsPath(dagnode.Cid()), nil } -func (api *ObjectAPI) Get(ctx context.Context, path coreiface.Path) (ipld.Node, error) { +func (api *ObjectAPI) Get(ctx context.Context, path ipath.Path) (ipld.Node, error) { return api.core().ResolveNode(ctx, path) } -func (api *ObjectAPI) Data(ctx context.Context, path coreiface.Path) (io.Reader, error) { +func (api *ObjectAPI) Data(ctx context.Context, path ipath.Path) (io.Reader, error) { nd, err := api.core().ResolveNode(ctx, path) if err != nil { return nil, err @@ -155,7 +156,7 @@ func (api *ObjectAPI) Data(ctx context.Context, path coreiface.Path) (io.Reader, return bytes.NewReader(pbnd.Data()), nil } -func (api *ObjectAPI) Links(ctx context.Context, path coreiface.Path) ([]*ipld.Link, error) { +func (api *ObjectAPI) Links(ctx context.Context, path ipath.Path) ([]*ipld.Link, error) { nd, err := api.core().ResolveNode(ctx, path) if err != nil { return nil, err @@ -170,7 +171,7 @@ func (api *ObjectAPI) Links(ctx context.Context, path coreiface.Path) ([]*ipld.L return out, nil } -func (api *ObjectAPI) Stat(ctx context.Context, path coreiface.Path) (*coreiface.ObjectStat, error) { +func (api *ObjectAPI) Stat(ctx context.Context, path ipath.Path) (*coreiface.ObjectStat, error) { nd, err := api.core().ResolveNode(ctx, path) if err != nil { return nil, err @@ -193,7 +194,7 @@ func (api *ObjectAPI) Stat(ctx context.Context, path coreiface.Path) (*coreiface return out, nil } -func (api *ObjectAPI) AddLink(ctx context.Context, base coreiface.Path, name string, child coreiface.Path, opts ...caopts.ObjectAddLinkOption) (coreiface.ResolvedPath, error) { +func (api *ObjectAPI) AddLink(ctx context.Context, base ipath.Path, name string, child ipath.Path, opts ...caopts.ObjectAddLinkOption) (ipath.Resolved, error) { options, err := caopts.ObjectAddLinkOptions(opts...) if err != nil { return nil, err @@ -231,10 +232,10 @@ func (api *ObjectAPI) AddLink(ctx context.Context, base coreiface.Path, name str return nil, err } - return coreiface.IpfsPath(nnode.Cid()), nil + return ipath.IpfsPath(nnode.Cid()), nil } -func (api *ObjectAPI) RmLink(ctx context.Context, base coreiface.Path, link string) (coreiface.ResolvedPath, error) { +func (api *ObjectAPI) RmLink(ctx context.Context, base ipath.Path, link string) (ipath.Resolved, error) { baseNd, err := api.core().ResolveNode(ctx, base) if err != nil { return nil, err @@ -257,18 +258,18 @@ func (api *ObjectAPI) RmLink(ctx context.Context, base coreiface.Path, link stri return nil, err } - return coreiface.IpfsPath(nnode.Cid()), nil + return ipath.IpfsPath(nnode.Cid()), nil } -func (api *ObjectAPI) AppendData(ctx context.Context, path coreiface.Path, r io.Reader) (coreiface.ResolvedPath, error) { +func (api *ObjectAPI) AppendData(ctx context.Context, path ipath.Path, r io.Reader) (ipath.Resolved, error) { return api.patchData(ctx, path, r, true) } -func (api *ObjectAPI) SetData(ctx context.Context, path coreiface.Path, r io.Reader) (coreiface.ResolvedPath, error) { +func (api *ObjectAPI) SetData(ctx context.Context, path ipath.Path, r io.Reader) (ipath.Resolved, error) { return api.patchData(ctx, path, r, false) } -func (api *ObjectAPI) patchData(ctx context.Context, path coreiface.Path, r io.Reader, appendData bool) (coreiface.ResolvedPath, error) { +func (api *ObjectAPI) patchData(ctx context.Context, path ipath.Path, r io.Reader, appendData bool) (ipath.Resolved, error) { nd, err := api.core().ResolveNode(ctx, path) if err != nil { return nil, err @@ -294,10 +295,10 @@ func (api *ObjectAPI) patchData(ctx context.Context, path coreiface.Path, r io.R return nil, err } - return coreiface.IpfsPath(pbnd.Cid()), nil + return ipath.IpfsPath(pbnd.Cid()), nil } -func (api *ObjectAPI) Diff(ctx context.Context, before coreiface.Path, after coreiface.Path) ([]coreiface.ObjectChange, error) { +func (api *ObjectAPI) Diff(ctx context.Context, before ipath.Path, after ipath.Path) ([]coreiface.ObjectChange, error) { beforeNd, err := api.core().ResolveNode(ctx, before) if err != nil { return nil, err @@ -321,11 +322,11 @@ func (api *ObjectAPI) Diff(ctx context.Context, before coreiface.Path, after cor } if change.Before.Defined() { - out[i].Before = coreiface.IpfsPath(change.Before) + out[i].Before = ipath.IpfsPath(change.Before) } if change.After.Defined() { - out[i].After = coreiface.IpfsPath(change.After) + out[i].After = ipath.IpfsPath(change.After) } } diff --git a/core/coreapi/path.go b/core/coreapi/path.go index 6302ec67f..4c7837f36 100644 --- a/core/coreapi/path.go +++ b/core/coreapi/path.go @@ -13,11 +13,12 @@ import ( "github.com/ipfs/go-path/resolver" uio "github.com/ipfs/go-unixfs/io" coreiface "github.com/ipfs/interface-go-ipfs-core" + path "github.com/ipfs/interface-go-ipfs-core/path" ) // ResolveNode resolves the path `p` using Unixfs resolver, gets and returns the // resolved Node. -func (api *CoreAPI) ResolveNode(ctx context.Context, p coreiface.Path) (ipld.Node, error) { +func (api *CoreAPI) ResolveNode(ctx context.Context, p path.Path) (ipld.Node, error) { rp, err := api.ResolvePath(ctx, p) if err != nil { return nil, err @@ -32,9 +33,12 @@ func (api *CoreAPI) ResolveNode(ctx context.Context, p coreiface.Path) (ipld.Nod // ResolvePath resolves the path `p` using Unixfs resolver, returns the // resolved path. -func (api *CoreAPI) ResolvePath(ctx context.Context, p coreiface.Path) (coreiface.ResolvedPath, error) { - if _, ok := p.(coreiface.ResolvedPath); ok { - return p.(coreiface.ResolvedPath), nil +func (api *CoreAPI) ResolvePath(ctx context.Context, p path.Path) (path.Resolved, error) { + if _, ok := p.(path.Resolved); ok { + return p.(path.Resolved), nil + } + if err := p.IsValid(); err != nil { + return nil, err } ipath := ipfspath.Path(p.String()) @@ -71,5 +75,5 @@ func (api *CoreAPI) ResolvePath(ctx context.Context, p coreiface.Path) (coreifac return nil, err } - return coreiface.NewResolvedPath(ipath, node, root, gopath.Join(rest...)), nil + return path.NewResolvedPath(ipath, node, root, gopath.Join(rest...)), nil } diff --git a/core/coreapi/pin.go b/core/coreapi/pin.go index df478732c..bd2663f03 100644 --- a/core/coreapi/pin.go +++ b/core/coreapi/pin.go @@ -10,11 +10,12 @@ import ( merkledag "github.com/ipfs/go-merkledag" coreiface "github.com/ipfs/interface-go-ipfs-core" caopts "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" ) type PinAPI CoreAPI -func (api *PinAPI) Add(ctx context.Context, p coreiface.Path, opts ...caopts.PinAddOption) error { +func (api *PinAPI) Add(ctx context.Context, p path.Path, opts ...caopts.PinAddOption) error { dagNode, err := api.core().ResolveNode(ctx, p) if err != nil { return fmt.Errorf("pin: %s", err) @@ -55,7 +56,7 @@ func (api *PinAPI) Ls(ctx context.Context, opts ...caopts.PinLsOption) ([]coreif } // Rm pin rm api -func (api *PinAPI) Rm(ctx context.Context, p coreiface.Path, opts ...caopts.PinRmOption) error { +func (api *PinAPI) Rm(ctx context.Context, p path.Path, opts ...caopts.PinRmOption) error { rp, err := api.core().ResolvePath(ctx, p) if err != nil { return err @@ -73,7 +74,7 @@ func (api *PinAPI) Rm(ctx context.Context, p coreiface.Path, opts ...caopts.PinR return api.pinning.Flush() } -func (api *PinAPI) Update(ctx context.Context, from coreiface.Path, to coreiface.Path, opts ...caopts.PinUpdateOption) error { +func (api *PinAPI) Update(ctx context.Context, from path.Path, to path.Path, opts ...caopts.PinUpdateOption) error { settings, err := caopts.PinUpdateOptions(opts...) if err != nil { return err @@ -107,7 +108,7 @@ type pinStatus struct { // BadNode is used in PinVerifyRes type badNode struct { - path coreiface.ResolvedPath + path path.Resolved err error } @@ -119,7 +120,7 @@ func (s *pinStatus) BadNodes() []coreiface.BadPinNode { return s.badNodes } -func (n *badNode) Path() coreiface.ResolvedPath { +func (n *badNode) Path() path.Resolved { return n.path } @@ -143,7 +144,7 @@ func (api *PinAPI) Verify(ctx context.Context) (<-chan coreiface.PinStatus, erro links, err := getLinks(ctx, root) if err != nil { status := &pinStatus{ok: false, cid: root} - status.badNodes = []coreiface.BadPinNode{&badNode{path: coreiface.IpldPath(root), err: err}} + status.badNodes = []coreiface.BadPinNode{&badNode{path: path.IpldPath(root), err: err}} visited[root] = status return status } @@ -174,10 +175,10 @@ func (api *PinAPI) Verify(ctx context.Context) (<-chan coreiface.PinStatus, erro type pinInfo struct { pinType string - path coreiface.ResolvedPath + path path.Resolved } -func (p *pinInfo) Path() coreiface.ResolvedPath { +func (p *pinInfo) Path() path.Resolved { return p.path } @@ -193,7 +194,7 @@ func (api *PinAPI) pinLsAll(typeStr string, ctx context.Context) ([]coreiface.Pi for _, c := range keyList { keys[c] = &pinInfo{ pinType: typeStr, - path: coreiface.IpldPath(c), + path: path.IpldPath(c), } } } diff --git a/core/coreapi/unixfs.go b/core/coreapi/unixfs.go index 984943cec..e8702837f 100644 --- a/core/coreapi/unixfs.go +++ b/core/coreapi/unixfs.go @@ -22,14 +22,15 @@ import ( unixfile "github.com/ipfs/go-unixfs/file" uio "github.com/ipfs/go-unixfs/io" coreiface "github.com/ipfs/interface-go-ipfs-core" - "github.com/ipfs/interface-go-ipfs-core/options" + options "github.com/ipfs/interface-go-ipfs-core/options" + path "github.com/ipfs/interface-go-ipfs-core/path" ) type UnixfsAPI CoreAPI // Add builds a merkledag node from a reader, adds it to the blockstore, // and returns the key representing that node. -func (api *UnixfsAPI) Add(ctx context.Context, files files.Node, opts ...options.UnixfsAddOption) (coreiface.ResolvedPath, error) { +func (api *UnixfsAPI) Add(ctx context.Context, files files.Node, opts ...options.UnixfsAddOption) (path.Resolved, error) { settings, prefix, err := options.UnixfsAddOptions(opts...) if err != nil { return nil, err @@ -130,10 +131,10 @@ func (api *UnixfsAPI) Add(ctx context.Context, files files.Node, opts ...options return nil, err } - return coreiface.IpfsPath(nd.Cid()), nil + return path.IpfsPath(nd.Cid()), nil } -func (api *UnixfsAPI) Get(ctx context.Context, p coreiface.Path) (files.Node, error) { +func (api *UnixfsAPI) Get(ctx context.Context, p path.Path) (files.Node, error) { ses := api.core().getSession(ctx) nd, err := ses.ResolveNode(ctx, p) @@ -146,7 +147,7 @@ func (api *UnixfsAPI) Get(ctx context.Context, p coreiface.Path) (files.Node, er // Ls returns the contents of an IPFS or IPNS object(s) at path p, with the format: // ` ` -func (api *UnixfsAPI) Ls(ctx context.Context, p coreiface.Path, opts ...options.UnixfsLsOption) (<-chan coreiface.DirEntry, error) { +func (api *UnixfsAPI) Ls(ctx context.Context, p path.Path, opts ...options.UnixfsLsOption) (<-chan coreiface.DirEntry, error) { settings, err := options.UnixfsLsOptions(opts...) if err != nil { return nil, err diff --git a/core/corehttp/gateway_handler.go b/core/corehttp/gateway_handler.go index a62aee4cd..cdbcce594 100644 --- a/core/corehttp/gateway_handler.go +++ b/core/corehttp/gateway_handler.go @@ -26,6 +26,7 @@ import ( ft "github.com/ipfs/go-unixfs" "github.com/ipfs/go-unixfs/importer" coreiface "github.com/ipfs/interface-go-ipfs-core" + ipath "github.com/ipfs/interface-go-ipfs-core/path" "github.com/libp2p/go-libp2p-routing" "github.com/multiformats/go-multibase" ) @@ -147,8 +148,8 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr ipnsHostname = true } - parsedPath, err := coreiface.ParsePath(urlPath) - if err != nil { + parsedPath := ipath.New(urlPath) + if err := parsedPath.IsValid(); err != nil { webError(w, "invalid ipfs path", err, http.StatusBadRequest) return } @@ -246,7 +247,7 @@ func (i *gatewayHandler) getOrHeadHandler(ctx context.Context, w http.ResponseWr return } - idx, err := i.api.Unixfs().Get(ctx, coreiface.Join(resolvedPath, "index.html")) + idx, err := i.api.Unixfs().Get(ctx, ipath.Join(resolvedPath, "index.html")) switch err.(type) { case nil: dirwithoutslash := urlPath[len(urlPath)-1] != '/' diff --git a/core/corehttp/gateway_test.go b/core/corehttp/gateway_test.go index 72193cf52..3578f33ad 100644 --- a/core/corehttp/gateway_test.go +++ b/core/corehttp/gateway_test.go @@ -23,6 +23,7 @@ import ( path "github.com/ipfs/go-path" iface "github.com/ipfs/interface-go-ipfs-core" nsopts "github.com/ipfs/interface-go-ipfs-core/options/namesys" + ipath "github.com/ipfs/interface-go-ipfs-core/path" ci "github.com/libp2p/go-libp2p-crypto" id "github.com/libp2p/go-libp2p/p2p/protocol/identify" ) @@ -344,12 +345,12 @@ func TestIPNSHostnameBacklinks(t *testing.T) { t.Fatal(err) } - k2, err := api.ResolvePath(ctx, iface.Join(k, "foo? #<'")) + k2, err := api.ResolvePath(ctx, ipath.Join(k, "foo? #<'")) if err != nil { t.Fatal(err) } - k3, err := api.ResolvePath(ctx, iface.Join(k, "foo? #<'/bar")) + k3, err := api.ResolvePath(ctx, ipath.Join(k, "foo? #<'/bar")) if err != nil { t.Fatal(err) } diff --git a/core/coreunix/add.go b/core/coreunix/add.go index 31c820632..47676c142 100644 --- a/core/coreunix/add.go +++ b/core/coreunix/add.go @@ -24,6 +24,7 @@ import ( ihelper "github.com/ipfs/go-unixfs/importer/helpers" "github.com/ipfs/go-unixfs/importer/trickle" coreiface "github.com/ipfs/interface-go-ipfs-core" + "github.com/ipfs/interface-go-ipfs-core/path" ) var log = logging.Logger("coreunix") @@ -478,7 +479,7 @@ func getOutput(dagnode ipld.Node) (*coreiface.AddEvent, error) { } output := &coreiface.AddEvent{ - Path: coreiface.IpfsPath(c), + Path: path.IpfsPath(c), Size: strconv.FormatUint(s, 10), } diff --git a/fuse/readonly/ipfs_test.go b/fuse/readonly/ipfs_test.go index 1383c169e..3f03779ad 100644 --- a/fuse/readonly/ipfs_test.go +++ b/fuse/readonly/ipfs_test.go @@ -30,7 +30,7 @@ import ( dag "github.com/ipfs/go-merkledag" importer "github.com/ipfs/go-unixfs/importer" uio "github.com/ipfs/go-unixfs/io" - iface "github.com/ipfs/interface-go-ipfs-core" + ipath "github.com/ipfs/interface-go-ipfs-core/path" ci "github.com/libp2p/go-testutil/ci" ) @@ -184,7 +184,7 @@ func TestIpfsStressRead(t *testing.T) { defer wg.Done() for i := 0; i < 2000; i++ { - item, _ := iface.ParsePath(paths[rand.Intn(len(paths))]) + item := ipath.New(paths[rand.Intn(len(paths))]) relpath := strings.Replace(item.String(), item.Namespace(), "", 1) fname := path.Join(mnt.Dir, relpath) diff --git a/go.mod b/go.mod index 5ecc7fe73..168172446 100644 --- a/go.mod +++ b/go.mod @@ -55,7 +55,7 @@ require ( github.com/ipfs/go-unixfs v0.0.4 github.com/ipfs/go-verifcid v0.0.1 github.com/ipfs/hang-fds v0.0.1 - github.com/ipfs/interface-go-ipfs-core v0.0.6 + github.com/ipfs/interface-go-ipfs-core v0.0.7 github.com/ipfs/iptb v1.4.0 github.com/ipfs/iptb-plugins v0.0.2 github.com/jbenet/go-is-domain v1.0.2 diff --git a/go.sum b/go.sum index 29afbf46a..300dd111c 100644 --- a/go.sum +++ b/go.sum @@ -217,8 +217,8 @@ github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2 github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0= github.com/ipfs/hang-fds v0.0.1 h1:KGAxiGtJPT3THVRNT6yxgpdFPeX4ZemUjENOt6NlOn4= github.com/ipfs/hang-fds v0.0.1/go.mod h1:U4JNbzwTpk/qP2Ms4VgrZ4HcgJGVosBJqMXvwe4udSY= -github.com/ipfs/interface-go-ipfs-core v0.0.6 h1:yf9D2cMLVgBMXHL+gs/HepDc/M7ZXQXYdoN0eXl7z9c= -github.com/ipfs/interface-go-ipfs-core v0.0.6/go.mod h1:VceUOYu+kPEy8Ev/gAhzXFTIfc/7xILKnL4fgZg8tZM= +github.com/ipfs/interface-go-ipfs-core v0.0.7 h1:KfPVykJTT2viS/NdIC7xUEmnS9jDufl3FXivatAxtZM= +github.com/ipfs/interface-go-ipfs-core v0.0.7/go.mod h1:VceUOYu+kPEy8Ev/gAhzXFTIfc/7xILKnL4fgZg8tZM= github.com/ipfs/iptb v1.4.0 h1:YFYTrCkLMRwk/35IMyC6+yjoQSHTEcNcefBStLJzgvo= github.com/ipfs/iptb v1.4.0/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg= github.com/ipfs/iptb-plugins v0.0.2 h1:JZp4h/+7f00dY4Epr8gzF+VqKITXmVGsZabvmZp7E9I=