@cryptotaxi247 / kubo / commits / 3cda8ca68

teach ipfs refs -r how to use GetBlocks

Jeromy committed Feb 18, 2015 at 18:38 UTC 3cda8ca685c16ae162df49368e170c6da721e011
1 file changed +40 -12
core/commands/refs.go
+40 -12
@@ -227,6 +227,14 @@ type RefWriter struct {
227
228 // WriteRefs writes refs of the given object to the underlying writer.
229 func (rw *RefWriter) WriteRefs(n *dag.Node) (int, error) {
230 + if rw.Recursive {
231 + return rw.writeRefsRecursive(n)
232 + } else {
233 + return rw.writeRefsSingle(n)
234 + }
235 +}
236 +
237 +func (rw *RefWriter) writeRefsRecursive(n *dag.Node) (int, error) {
238 nkey, err := n.Key()
239 if err != nil {
240 return 0, err
@@ -236,29 +244,23 @@ func (rw *RefWriter) WriteRefs(n *dag.Node) (int, error) {
244 return 0, nil
245 }
246
239 - count := 0
240 - for _, l := range n.Links {
241 - lk := u.Key(l.Hash)
242 -
247 + var count int
248 + for i, ng := range rw.DAG.GetDAG(rw.Ctx, n) {
249 + lk := u.Key(n.Links[i].Hash)
250 if rw.skip(lk) {
251 continue
252 }
253
247 - if err := rw.WriteEdge(nkey, lk, l.Name); err != nil {
254 + if err := rw.WriteEdge(nkey, lk, n.Links[i].Name); err != nil {
255 return count, err
256 }
250 - count++
257
252 - if !rw.Recursive {
253 - continue
254 - }
255 -
256 - child, err := l.GetNode(rw.DAG)
258 + nd, err := ng.Get()
259 if err != nil {
260 return count, err
261 }
262
261 - c, err := rw.WriteRefs(child)
263 + c, err := rw.writeRefsRecursive(nd)
264 count += c
265 if err != nil {
266 return count, err
@@ -267,6 +269,32 @@ func (rw *RefWriter) WriteRefs(n *dag.Node) (int, error) {
269 return count, nil
270 }
271
272 +func (rw *RefWriter) writeRefsSingle(n *dag.Node) (int, error) {
273 + nkey, err := n.Key()
274 + if err != nil {
275 + return 0, err
276 + }
277 +
278 + if rw.skip(nkey) {
279 + return 0, nil
280 + }
281 +
282 + count := 0
283 + for _, l := range n.Links {
284 + lk := u.Key(l.Hash)
285 +
286 + if rw.skip(lk) {
287 + continue
288 + }
289 +
290 + if err := rw.WriteEdge(nkey, lk, l.Name); err != nil {
291 + return count, err
292 + }
293 + count++
294 + }
295 + return count, nil
296 +}
297 +
298 // skip returns whether to skip a key
299 func (rw *RefWriter) skip(k u.Key) bool {
300 if !rw.Unique {