@cryptotaxi247 / kubo / commits / 6b0ff2bd7

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 }