提交 3cda8ca6 作者: Jeromy

teach ipfs refs -r how to use GetBlocks

上级 5253b6ab
...@@ -227,6 +227,14 @@ type RefWriter struct { ...@@ -227,6 +227,14 @@ type RefWriter struct {
// WriteRefs writes refs of the given object to the underlying writer. // WriteRefs writes refs of the given object to the underlying writer.
func (rw *RefWriter) WriteRefs(n *dag.Node) (int, error) { func (rw *RefWriter) WriteRefs(n *dag.Node) (int, error) {
if rw.Recursive {
return rw.writeRefsRecursive(n)
} else {
return rw.writeRefsSingle(n)
}
}
func (rw *RefWriter) writeRefsRecursive(n *dag.Node) (int, error) {
nkey, err := n.Key() nkey, err := n.Key()
if err != nil { if err != nil {
return 0, err return 0, err
...@@ -236,33 +244,53 @@ func (rw *RefWriter) WriteRefs(n *dag.Node) (int, error) { ...@@ -236,33 +244,53 @@ func (rw *RefWriter) WriteRefs(n *dag.Node) (int, error) {
return 0, nil return 0, nil
} }
count := 0 var count int
for _, l := range n.Links { for i, ng := range rw.DAG.GetDAG(rw.Ctx, n) {
lk := u.Key(l.Hash) lk := u.Key(n.Links[i].Hash)
if rw.skip(lk) { if rw.skip(lk) {
continue continue
} }
if err := rw.WriteEdge(nkey, lk, l.Name); err != nil { if err := rw.WriteEdge(nkey, lk, n.Links[i].Name); err != nil {
return count, err return count, err
} }
count++
if !rw.Recursive { nd, err := ng.Get()
continue if err != nil {
return count, err
} }
child, err := l.GetNode(rw.DAG) c, err := rw.writeRefsRecursive(nd)
count += c
if err != nil { if err != nil {
return count, err return count, err
} }
}
return count, nil
}
c, err := rw.WriteRefs(child) func (rw *RefWriter) writeRefsSingle(n *dag.Node) (int, error) {
count += c nkey, err := n.Key()
if err != nil { if err != nil {
return 0, err
}
if rw.skip(nkey) {
return 0, nil
}
count := 0
for _, l := range n.Links {
lk := u.Key(l.Hash)
if rw.skip(lk) {
continue
}
if err := rw.WriteEdge(nkey, lk, l.Name); err != nil {
return count, err return count, err
} }
count++
} }
return count, nil return count, nil
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论