core/commands/add: Change add() to only accept a single reader
The change to an array of readers comes from e096060b (refactor(core/commands2/add) split loop, 2014-11-06), where it's used to setup readers for each path in the argument list. However, since 6faeee83 (cmds2/add: temp fix for -r. horrible hack, 2014-11-11) the argument looping moved outside of add() and into Run(), so we can drop the multiple-reader support from add(). Adding a file can create multiple nodes (e.g. the splitter can chunk the file into several blocks), but: 1. we were only appending a single node per reader to our returned list, and 2. we are only using the final node in that returned list, so this commit also adjusts add() to return a single node reference instead on an array of nodes.
W. Trevor King committed
Apr 23, 2015 at 09:35 UTC
c322a4eb0f5b7268d4fae3f426e9c32af0185f97
1 file changed
+9
-14
core/commands/add.go
+9
-14
@@ -213,23 +213,18 @@ remains to be implemented.
213
Type: AddedObject{},
214
}
215
216
-func add(n *core.IpfsNode, readers []io.Reader) ([]*dag.Node, error) {
217
- dagnodes := make([]*dag.Node, 0)
218
-
219
- for _, reader := range readers {
220
- node, err := importer.BuildDagFromReader(reader, n.DAG, nil, chunk.DefaultSplitter)
221
- if err != nil {
222
- return nil, err
223
- }
224
- dagnodes = append(dagnodes, node)
216
+func add(n *core.IpfsNode, reader io.Reader) (*dag.Node, error) {
217
+ node, err := importer.BuildDagFromReader(reader, n.DAG, nil, chunk.DefaultSplitter)
218
+ if err != nil {
219
+ return nil, err
220
}
221
227
- err := n.Pinning.Flush()
222
+ err = n.Pinning.Flush()
223
if err != nil {
224
return nil, err
225
}
226
232
- return dagnodes, nil
227
+ return node, nil
228
}
229
230
func addFile(n *core.IpfsNode, file files.File, out chan interface{}, progress bool, wrap bool) (*dag.Node, error) {
@@ -256,16 +251,16 @@ func addFile(n *core.IpfsNode, file files.File, out chan interface{}, progress b
251
return dagnode, nil
252
}
253
259
- dns, err := add(n, []io.Reader{reader})
254
+ dagnode, err := add(n, reader)
255
if err != nil {
256
return nil, err
257
}
258
259
log.Infof("adding file: %s", file.FileName())
265
- if err := outputDagnode(out, file.FileName(), dns[len(dns)-1]); err != nil {
260
+ if err := outputDagnode(out, file.FileName(), dagnode); err != nil {
261
return nil, err
262
}
268
- return dns[len(dns)-1], nil // last dag node is the file.
263
+ return dagnode, nil
264
}
265
266
func addDir(n *core.IpfsNode, dir files.File, out chan interface{}, progress bool) (*dag.Node, error) {