From 498ee0dc0b0e0f1be16ff083a08d3c691ec90efc Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Sun, 3 Dec 2017 19:03:04 -0800 Subject: [PATCH] resolve and pin in one step instead of resolving all the pins first and then pinning, pin after resolving each pin. This: 1. Avoids storing all the nodes in memory. 2. Avoids not showing pin progress. fixes #4122 License: MIT Signed-off-by: Steven Allen --- core/corerepo/pinning.go | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/core/corerepo/pinning.go b/core/corerepo/pinning.go index 7267f5d41..e49eb210a 100644 --- a/core/corerepo/pinning.go +++ b/core/corerepo/pinning.go @@ -22,18 +22,17 @@ import ( uio "github.com/ipfs/go-ipfs/unixfs/io" cid "gx/ipfs/QmNp85zy9RLrQ5oQD4hPyS39ezrrXpcaa7R4Y9kxdWQLLQ/go-cid" - node "gx/ipfs/QmPN7cwmpcc4DWXb4KTB9dNAJgjuPY69h3npsMfhRrQL9c/go-ipld-format" ) func Pin(n *core.IpfsNode, ctx context.Context, paths []string, recursive bool) ([]*cid.Cid, error) { - dagnodes := make([]node.Node, 0) + out := make([]*cid.Cid, len(paths)) r := &path.Resolver{ DAG: n.DAG, ResolveOnce: uio.ResolveUnixfsOnce, } - for _, fpath := range paths { + for i, fpath := range paths { p, err := path.ParsePath(fpath) if err != nil { return nil, err @@ -43,18 +42,11 @@ func Pin(n *core.IpfsNode, ctx context.Context, paths []string, recursive bool) if err != nil { return nil, fmt.Errorf("pin: %s", err) } - dagnodes = append(dagnodes, dagnode) - } - - var out []*cid.Cid - for _, dagnode := range dagnodes { - c := dagnode.Cid() - - err := n.Pinning.Pin(ctx, dagnode, recursive) + err = n.Pinning.Pin(ctx, dagnode, recursive) if err != nil { return nil, fmt.Errorf("pin: %s", err) } - out = append(out, c) + out[i] = dagnode.Cid() } err := n.Pinning.Flush()