1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-09-10 22:49:13 +08:00

make callback take a node instead of a key

This commit is contained in:
Jeromy
2015-05-28 08:28:59 -07:00
parent dd928a2b1d
commit b660f937bd
5 changed files with 33 additions and 28 deletions

View File

@ -17,7 +17,6 @@ import (
"github.com/ipfs/go-ipfs/pin" "github.com/ipfs/go-ipfs/pin"
"github.com/ipfs/go-ipfs/thirdparty/eventlog" "github.com/ipfs/go-ipfs/thirdparty/eventlog"
unixfs "github.com/ipfs/go-ipfs/unixfs" unixfs "github.com/ipfs/go-ipfs/unixfs"
u "github.com/ipfs/go-ipfs/util"
) )
var log = eventlog.Logger("coreunix") var log = eventlog.Logger("coreunix")
@ -100,10 +99,7 @@ func add(n *core.IpfsNode, reader io.Reader) (*merkledag.Node, error) {
reader, reader,
n.DAG, n.DAG,
chunk.DefaultSplitter, chunk.DefaultSplitter,
func(k u.Key, root bool) error { importer.PinIndirectCB(mp),
mp.PinWithMode(k, pin.Indirect)
return nil
},
) )
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -3,12 +3,11 @@ package helpers
import ( import (
dag "github.com/ipfs/go-ipfs/merkledag" dag "github.com/ipfs/go-ipfs/merkledag"
"github.com/ipfs/go-ipfs/pin" "github.com/ipfs/go-ipfs/pin"
u "github.com/ipfs/go-ipfs/util"
) )
type BlockCB func(u.Key, bool) error type NodeCB func(node *dag.Node, root bool) error
var nilFunc BlockCB = func(_ u.Key, _ bool) error { return nil } var nilFunc NodeCB = func(_ *dag.Node, _ bool) error { return nil }
// DagBuilderHelper wraps together a bunch of objects needed to // DagBuilderHelper wraps together a bunch of objects needed to
// efficiently create unixfs dag trees // efficiently create unixfs dag trees
@ -18,7 +17,7 @@ type DagBuilderHelper struct {
in <-chan []byte in <-chan []byte
nextData []byte // the next item to return. nextData []byte // the next item to return.
maxlinks int maxlinks int
bcb BlockCB ncb NodeCB
} }
type DagBuilderParams struct { type DagBuilderParams struct {
@ -29,22 +28,22 @@ type DagBuilderParams struct {
Dagserv dag.DAGService Dagserv dag.DAGService
// Callback for each block added // Callback for each block added
BlockCB BlockCB NodeCB NodeCB
} }
// Generate a new DagBuilderHelper from the given params, using 'in' as a // Generate a new DagBuilderHelper from the given params, using 'in' as a
// data source // data source
func (dbp *DagBuilderParams) New(in <-chan []byte) *DagBuilderHelper { func (dbp *DagBuilderParams) New(in <-chan []byte) *DagBuilderHelper {
bcb := dbp.BlockCB ncb := dbp.NodeCB
if bcb == nil { if ncb == nil {
bcb = nilFunc ncb = nilFunc
} }
return &DagBuilderHelper{ return &DagBuilderHelper{
dserv: dbp.Dagserv, dserv: dbp.Dagserv,
in: in, in: in,
maxlinks: dbp.Maxlinks, maxlinks: dbp.Maxlinks,
bcb: bcb, ncb: ncb,
} }
} }
@ -136,13 +135,13 @@ func (db *DagBuilderHelper) Add(node *UnixfsNode) (*dag.Node, error) {
return nil, err return nil, err
} }
key, err := db.dserv.Add(dn) _, err = db.dserv.Add(dn)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// block callback // node callback
err = db.bcb(key, true) err = db.ncb(dn, true)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -107,13 +107,13 @@ func (n *UnixfsNode) AddChild(child *UnixfsNode, db *DagBuilderHelper) error {
return err return err
} }
childkey, err := db.dserv.Add(childnode) _, err = db.dserv.Add(childnode)
if err != nil { if err != nil {
return err return err
} }
// Pin the child node indirectly // Pin the child node indirectly
err = db.bcb(childkey, false) err = db.ncb(childnode, false)
if err != nil { if err != nil {
return err return err
} }

View File

@ -39,34 +39,39 @@ func BuildDagFromFile(fpath string, ds dag.DAGService, mp pin.ManualPinner) (*da
return BuildDagFromReader(f, ds, chunk.DefaultSplitter, BasicPinnerCB(mp)) return BuildDagFromReader(f, ds, chunk.DefaultSplitter, BasicPinnerCB(mp))
} }
func BuildDagFromReader(r io.Reader, ds dag.DAGService, spl chunk.BlockSplitter, bcb h.BlockCB) (*dag.Node, error) { func BuildDagFromReader(r io.Reader, ds dag.DAGService, spl chunk.BlockSplitter, ncb h.NodeCB) (*dag.Node, error) {
// Start the splitter // Start the splitter
blkch := spl.Split(r) blkch := spl.Split(r)
dbp := h.DagBuilderParams{ dbp := h.DagBuilderParams{
Dagserv: ds, Dagserv: ds,
Maxlinks: h.DefaultLinksPerBlock, Maxlinks: h.DefaultLinksPerBlock,
BlockCB: bcb, NodeCB: ncb,
} }
return bal.BalancedLayout(dbp.New(blkch)) return bal.BalancedLayout(dbp.New(blkch))
} }
func BuildTrickleDagFromReader(r io.Reader, ds dag.DAGService, spl chunk.BlockSplitter, bcb h.BlockCB) (*dag.Node, error) { func BuildTrickleDagFromReader(r io.Reader, ds dag.DAGService, spl chunk.BlockSplitter, ncb h.NodeCB) (*dag.Node, error) {
// Start the splitter // Start the splitter
blkch := spl.Split(r) blkch := spl.Split(r)
dbp := h.DagBuilderParams{ dbp := h.DagBuilderParams{
Dagserv: ds, Dagserv: ds,
Maxlinks: h.DefaultLinksPerBlock, Maxlinks: h.DefaultLinksPerBlock,
BlockCB: bcb, NodeCB: ncb,
} }
return trickle.TrickleLayout(dbp.New(blkch)) return trickle.TrickleLayout(dbp.New(blkch))
} }
func BasicPinnerCB(p pin.ManualPinner) h.BlockCB { func BasicPinnerCB(p pin.ManualPinner) h.NodeCB {
return func(k u.Key, root bool) error { return func(n *dag.Node, root bool) error {
k, err := n.Key()
if err != nil {
return err
}
if root { if root {
p.PinWithMode(k, pin.Recursive) p.PinWithMode(k, pin.Recursive)
return p.Flush() return p.Flush()
@ -77,8 +82,13 @@ func BasicPinnerCB(p pin.ManualPinner) h.BlockCB {
} }
} }
func PinIndirectCB(p pin.ManualPinner) h.BlockCB { func PinIndirectCB(p pin.ManualPinner) h.NodeCB {
return func(k u.Key, root bool) error { return func(n *dag.Node, root bool) error {
k, err := n.Key()
if err != nil {
return err
}
p.PinWithMode(k, pin.Indirect) p.PinWithMode(k, pin.Indirect)
return nil return nil
} }

View File

@ -309,7 +309,7 @@ func (dm *DagModifier) appendData(node *mdag.Node, blks <-chan []byte) (*mdag.No
dbp := &help.DagBuilderParams{ dbp := &help.DagBuilderParams{
Dagserv: dm.dagserv, Dagserv: dm.dagserv,
Maxlinks: help.DefaultLinksPerBlock, Maxlinks: help.DefaultLinksPerBlock,
BlockCB: imp.BasicPinnerCB(dm.mp), NodeCB: imp.BasicPinnerCB(dm.mp),
} }
return trickle.TrickleAppend(node, dbp.New(blks)) return trickle.TrickleAppend(node, dbp.New(blks))