Output dirs on ipfs add -rn
License: MIT Signed-off-by: Stephen Whitmore <noffle@ipfs.io>
Stephen Whitmore committed
Apr 6, 2016 at 19:42 UTC
6b0ff2bd788a2db24782e4ab1fb5974f62547cae
2 files changed
+35
-20
core/commands/add.go
+5
-5
@@ -163,16 +163,16 @@ MerkleDAG.
163
}
164
}
165
166
- if hash {
167
- return nil
168
- }
169
-
166
// copy intermediary nodes from editor to our actual dagservice
171
- _, err := fileAdder.Finalize()
167
+ _, err := fileAdder.Finalize(hash)
168
if err != nil {
169
return err
170
}
171
172
+ if hash {
173
+ return nil
174
+ }
175
+
176
return fileAdder.PinRoot()
177
}
178
core/coreunix/add.go
+30
-15
@@ -173,21 +173,23 @@ func (adder *Adder) PinRoot() error {
173
return adder.node.Pinning.Flush()
174
}
175
176
-func (adder *Adder) Finalize() (*dag.Node, error) {
176
+func (adder *Adder) Finalize(write bool) (*dag.Node, error) {
177
+ root := adder.mr.GetValue()
178
+
179
// cant just call adder.RootNode() here as we need the name for printing
178
- root, err := adder.mr.GetValue().GetNode()
180
+ rootNode, err := root.GetNode()
181
if err != nil {
182
return nil, err
183
}
184
185
var name string
186
if !adder.Wrap {
185
- name = root.Links[0].Name
186
- child, err := root.Links[0].GetNode(adder.ctx, adder.node.DAG)
187
+ name = rootNode.Links[0].Name
188
+
189
+ root, err = adder.mr.GetValue().(*mfs.Directory).Child(name)
190
if err != nil {
191
return nil, err
192
}
190
- root = child
193
}
194
195
err = adder.outputDirs(name, root)
@@ -195,26 +197,39 @@ func (adder *Adder) Finalize() (*dag.Node, error) {
197
return nil, err
198
}
199
198
- err = adder.mr.Close()
200
+ if write {
201
+ err = adder.mr.Close()
202
+ if err != nil {
203
+ return nil, err
204
+ }
205
+ }
206
+
207
+ rootNode, err = root.GetNode()
208
if err != nil {
209
return nil, err
210
}
202
-
203
- return root, nil
211
+ return rootNode, nil
212
}
213
206
-func (adder *Adder) outputDirs(path string, nd *dag.Node) error {
207
- if !bytes.Equal(nd.Data, folderData) {
214
+func (adder *Adder) outputDirs(path string, fs mfs.FSNode) error {
215
+ nd, err := fs.GetNode()
216
+ if err != nil {
217
+ return err
218
+ }
219
+
220
+ if !bytes.Equal(nd.Data, folderData) || fs.Type() != mfs.TDir {
221
return nil
222
}
223
211
- for _, l := range nd.Links {
212
- child, err := l.GetNode(adder.ctx, adder.node.DAG)
224
+ dir := fs.(*mfs.Directory)
225
+
226
+ for _, name := range dir.ListNames() {
227
+ child, err := dir.Child(name)
228
if err != nil {
229
return err
230
}
231
217
- err = adder.outputDirs(gopath.Join(path, l.Name), child)
232
+ err = adder.outputDirs(gopath.Join(path, name), child)
233
if err != nil {
234
return err
235
}
@@ -270,7 +285,7 @@ func AddR(n *core.IpfsNode, root string) (key string, err error) {
285
return "", err
286
}
287
273
- nd, err := fileAdder.Finalize()
288
+ nd, err := fileAdder.Finalize(true)
289
if err != nil {
290
return "", err
291
}
@@ -302,7 +317,7 @@ func AddWrapped(n *core.IpfsNode, r io.Reader, filename string) (string, *dag.No
317
return "", nil, err
318
}
319
305
- dagnode, err := fileAdder.Finalize()
320
+ dagnode, err := fileAdder.Finalize(true)
321
if err != nil {
322
return "", nil, err
323
}