@@ -13,10 +13,10 @@ import (
13
13
trickle "github.com/ipfs/go-ipfs/importer/trickle"
14
14
dag "github.com/ipfs/go-ipfs/merkledag"
15
15
"github.com/ipfs/go-ipfs/pin"
16
- "github.com/ipfs/go-ipfs/util"
16
+ u "github.com/ipfs/go-ipfs/util"
17
17
)
18
18
19
- var log = util .Logger ("importer" )
19
+ var log = u .Logger ("importer" )
20
20
21
21
// Builds a DAG from the given file, writing created blocks to disk as they are
22
22
// created
@@ -36,31 +36,60 @@ func BuildDagFromFile(fpath string, ds dag.DAGService, mp pin.ManualPinner) (*da
36
36
}
37
37
defer f .Close ()
38
38
39
- return BuildDagFromReader (f , ds , mp , chunk .DefaultSplitter )
39
+ return BuildDagFromReader (f , ds , chunk .DefaultSplitter , BasicPinnerCB ( mp ) )
40
40
}
41
41
42
- func BuildDagFromReader (r io.Reader , ds dag.DAGService , mp pin. ManualPinner , spl chunk. BlockSplitter ) (* dag.Node , error ) {
42
+ func BuildDagFromReader (r io.Reader , ds dag.DAGService , spl chunk. BlockSplitter , ncb h. NodeCB ) (* dag.Node , error ) {
43
43
// Start the splitter
44
44
blkch := spl .Split (r )
45
45
46
46
dbp := h.DagBuilderParams {
47
47
Dagserv : ds ,
48
48
Maxlinks : h .DefaultLinksPerBlock ,
49
- Pinner : mp ,
49
+ NodeCB : ncb ,
50
50
}
51
51
52
52
return bal .BalancedLayout (dbp .New (blkch ))
53
53
}
54
54
55
- func BuildTrickleDagFromReader (r io.Reader , ds dag.DAGService , mp pin. ManualPinner , spl chunk. BlockSplitter ) (* dag.Node , error ) {
55
+ func BuildTrickleDagFromReader (r io.Reader , ds dag.DAGService , spl chunk. BlockSplitter , ncb h. NodeCB ) (* dag.Node , error ) {
56
56
// Start the splitter
57
57
blkch := spl .Split (r )
58
58
59
59
dbp := h.DagBuilderParams {
60
60
Dagserv : ds ,
61
61
Maxlinks : h .DefaultLinksPerBlock ,
62
- Pinner : mp ,
62
+ NodeCB : ncb ,
63
63
}
64
64
65
65
return trickle .TrickleLayout (dbp .New (blkch ))
66
66
}
67
+
68
+ func BasicPinnerCB (p pin.ManualPinner ) h.NodeCB {
69
+ return func (n * dag.Node , last bool ) error {
70
+ k , err := n .Key ()
71
+ if err != nil {
72
+ return err
73
+ }
74
+
75
+ if last {
76
+ p .PinWithMode (k , pin .Recursive )
77
+ return p .Flush ()
78
+ } else {
79
+ p .PinWithMode (k , pin .Indirect )
80
+ return nil
81
+ }
82
+ }
83
+ }
84
+
85
+ func PinIndirectCB (p pin.ManualPinner ) h.NodeCB {
86
+ return func (n * dag.Node , last bool ) error {
87
+ k , err := n .Key ()
88
+ if err != nil {
89
+ return err
90
+ }
91
+
92
+ p .PinWithMode (k , pin .Indirect )
93
+ return nil
94
+ }
95
+ }
0 commit comments