diff --git a/core/commands2/pin.go b/core/commands2/pin.go index eb362a624..b93b33060 100644 --- a/core/commands2/pin.go +++ b/core/commands2/pin.go @@ -5,6 +5,8 @@ import ( "fmt" cmds "github.com/jbenet/go-ipfs/commands" + "github.com/jbenet/go-ipfs/core" + "github.com/jbenet/go-ipfs/merkledag" ) var pinCmd = &cmds.Command{ @@ -35,27 +37,17 @@ var pinCmd = &cmds.Command{ } }*/ + paths := make([]string, 0) for _, arg := range req.Arguments() { path, ok := arg.(string) if !ok { res.SetError(errors.New("cast error"), cmds.ErrNormal) return } - - dagnode, err := n.Resolver.ResolvePath(path) - if err != nil { - res.SetError(fmt.Errorf("pin error: %v", err), cmds.ErrNormal) - return - } - - err = n.Pinning.Pin(dagnode, recursive) - if err != nil { - res.SetError(fmt.Errorf("pin: %v", err), cmds.ErrNormal) - return - } + paths = append(paths, path) } - err := n.Pinning.Flush() + _, err := pin(n, paths, recursive) if err != nil { res.SetError(err, cmds.ErrNormal) } @@ -107,3 +99,30 @@ var unpinCmd = &cmds.Command{ // TODO: create some output to show what got unpinned }, } + +func pin(n *core.IpfsNode, paths []string, recursive bool) ([]*merkledag.Node, error) { + + dagnodes := make([]*merkledag.Node, 0) + for _, path := range paths { + + dagnode, err := n.Resolver.ResolvePath(path) + if err != nil { + return nil, fmt.Errorf("pin error: %v", err) + } + dagnodes = append(dagnodes, dagnode) + } + + for _, dagnode := range dagnodes { + err := n.Pinning.Pin(dagnode, recursive) + if err != nil { + return nil, fmt.Errorf("pin: %v", err) + } + } + + err := n.Pinning.Flush() + if err != nil { + return nil, err + } + + return dagnodes, nil +}