func (rw *RefWriter) writeRefsRecursive(n node.Node) (int, error) { nc := n.Cid() var count int for i, ng := range dag.GetDAG(rw.Ctx, rw.DAG, n) { lc := n.Links()[i].Cid if rw.skip(lc) { continue } if err := rw.WriteEdge(nc, lc, n.Links()[i].Name); err != nil { return count, err } nd, err := ng.Get(rw.Ctx) if err != nil { return count, err } c, err := rw.writeRefsRecursive(nd) count += c if err != nil { return count, err } } return count, nil }
func (rw *RefWriter) writeRefsRecursive(n *dag.Node) (int, error) { nkey, err := n.Key() if err != nil { return 0, err } var count int for i, ng := range dag.GetDAG(rw.Ctx, rw.DAG, n) { lk := key.Key(n.Links[i].Hash) if rw.skip(lk) { continue } if err := rw.WriteEdge(nkey, lk, n.Links[i].Name); err != nil { return count, err } nd, err := ng.Get(rw.Ctx) if err != nil { return count, err } c, err := rw.writeRefsRecursive(nd) count += c if err != nil { return count, err } } return count, nil }
func NewDataFileReader(ctx context.Context, n *mdag.Node, pb *ftpb.Data, serv mdag.DAGService) *DagReader { fctx, cancel := context.WithCancel(ctx) promises := mdag.GetDAG(fctx, serv, n) return &DagReader{ node: n, serv: serv, buf: NewRSNCFromBytes(pb.GetData()), promises: promises, ctx: fctx, cancel: cancel, pbdata: pb, } }
func NewPBFileReader(ctx context.Context, n *mdag.ProtoNode, pb *ftpb.Data, serv mdag.DAGService) *pbDagReader { fctx, cancel := context.WithCancel(ctx) promises := mdag.GetDAG(fctx, serv, n) return &pbDagReader{ node: n, serv: serv, buf: NewBufDagReader(pb.GetData()), promises: promises, ctx: fctx, cancel: cancel, pbdata: pb, } }
func (w *Writer) writeDir(nd *mdag.Node, fpath string) error { if err := writeDirHeader(w.TarW, fpath); err != nil { return err } for i, ng := range mdag.GetDAG(w.ctx, w.Dag, nd) { child, err := ng.Get(w.ctx) if err != nil { return err } npath := path.Join(fpath, nd.Links[i].Name) if err := w.WriteNode(child, npath); err != nil { return err } } return nil }
func (w *Writer) writeDir(nd *mdag.ProtoNode, fpath string) error { if err := writeDirHeader(w.TarW, fpath); err != nil { return err } for i, ng := range mdag.GetDAG(w.ctx, w.Dag, nd) { child, err := ng.Get(w.ctx) if err != nil { return err } childpb, ok := child.(*mdag.ProtoNode) if !ok { return mdag.ErrNotProtobuf } npath := path.Join(fpath, nd.Links()[i].Name) if err := w.WriteNode(childpb, npath); err != nil { return err } } return nil }