mirror of
https://github.com/ipfs/kubo.git
synced 2025-07-03 21:08:17 +08:00
refactor(core/commands2/add) split loop
@mappum
This commit is contained in:

committed by
Juan Batiz-Benet

parent
8cc1f67f76
commit
e096060b90
@ -1,12 +1,13 @@
|
|||||||
package commands
|
package commands
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
cmds "github.com/jbenet/go-ipfs/commands"
|
cmds "github.com/jbenet/go-ipfs/commands"
|
||||||
"github.com/jbenet/go-ipfs/core"
|
core "github.com/jbenet/go-ipfs/core"
|
||||||
"github.com/jbenet/go-ipfs/importer"
|
importer "github.com/jbenet/go-ipfs/importer"
|
||||||
dag "github.com/jbenet/go-ipfs/merkledag"
|
dag "github.com/jbenet/go-ipfs/merkledag"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -33,24 +34,31 @@ var addCmd = &cmds.Command{
|
|||||||
// if r, _ := opt.(bool); found && r {
|
// if r, _ := opt.(bool); found && r {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
readers := make([]io.Reader, 0)
|
||||||
|
for _, arg := range req.Arguments() {
|
||||||
|
reader, ok := arg.(io.Reader)
|
||||||
|
if !ok {
|
||||||
|
res.SetError(errors.New("cast error"), cmds.ErrNormal)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
readers = append(readers, reader)
|
||||||
|
}
|
||||||
|
|
||||||
|
dagnodes, err := add(n, readers)
|
||||||
|
if err != nil {
|
||||||
|
res.SetError(errors.New("cast error"), cmds.ErrNormal)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
added := make([]Object, len(req.Arguments()))
|
added := make([]Object, len(req.Arguments()))
|
||||||
|
for _, dagnode := range dagnodes {
|
||||||
|
|
||||||
// add every path in args
|
k, err := dagnode.Key()
|
||||||
for i, arg := range req.Arguments() {
|
|
||||||
// Add the file
|
|
||||||
node, err := add(n, arg.(io.Reader))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res.SetError(err, cmds.ErrNormal)
|
res.SetError(err, cmds.ErrNormal)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
added = append(added, Object{Hash: k.String(), Links: nil})
|
||||||
k, err := node.Key()
|
|
||||||
if err != nil {
|
|
||||||
res.SetError(err, cmds.ErrNormal)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
added[i] = Object{k.String(), nil}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
res.SetOutput(&AddOutput{added})
|
res.SetOutput(&AddOutput{added})
|
||||||
@ -73,18 +81,27 @@ var addCmd = &cmds.Command{
|
|||||||
Type: &AddOutput{},
|
Type: &AddOutput{},
|
||||||
}
|
}
|
||||||
|
|
||||||
func add(n *core.IpfsNode, in io.Reader) (*dag.Node, error) {
|
func add(n *core.IpfsNode, readers []io.Reader) ([]*dag.Node, error) {
|
||||||
node, err := importer.NewDagFromReader(in)
|
|
||||||
|
dagnodes := make([]*dag.Node, 0)
|
||||||
|
|
||||||
|
for _, reader := range readers {
|
||||||
|
node, err := importer.NewDagFromReader(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// add the file to the graph + local storage
|
err = n.DAG.AddRecursive(node) // add the file to the graph + local storage
|
||||||
err = n.DAG.AddRecursive(node)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// ensure we keep it
|
err = n.Pinning.Pin(node, true) // ensure we keep it
|
||||||
return node, n.Pinning.Pin(node, true)
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
dagnodes = append(dagnodes, node)
|
||||||
|
}
|
||||||
|
return dagnodes, nil
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user