mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-24 20:07:45 +08:00
60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
// Package importer implements utilities used to create IPFS DAGs from files
|
|
// and readers.
|
|
package importer
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
chunker "gx/ipfs/QmWo8jYc19ppG7YoTsrr2kEtLRbARTJho5oNXFTR6B7Peq/go-ipfs-chunker"
|
|
"gx/ipfs/QmceUdzxkimdYsgtX733uNgzf1DLHyBKN6ehGSp85ayppM/go-ipfs-cmdkit/files"
|
|
ipld "gx/ipfs/Qme5bWv7wtjUNGsK2BNGVUFPKiuxWrsqrtvYwCLRw8YFES/go-ipld-format"
|
|
|
|
bal "github.com/ipfs/go-ipfs/importer/balanced"
|
|
h "github.com/ipfs/go-ipfs/importer/helpers"
|
|
trickle "github.com/ipfs/go-ipfs/importer/trickle"
|
|
)
|
|
|
|
// BuildDagFromFile builds a DAG from the given file, writing created blocks to
|
|
// disk as they are created.
|
|
func BuildDagFromFile(fpath string, ds ipld.DAGService) (ipld.Node, error) {
|
|
stat, err := os.Lstat(fpath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if stat.IsDir() {
|
|
return nil, fmt.Errorf("`%s` is a directory", fpath)
|
|
}
|
|
|
|
f, err := files.NewSerialFile(fpath, fpath, false, stat)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer f.Close()
|
|
|
|
return BuildDagFromReader(ds, chunker.DefaultSplitter(f))
|
|
}
|
|
|
|
// BuildDagFromReader creates a DAG given a DAGService and a Splitter
|
|
// implementation (Splitters are io.Readers), using a Balanced layout.
|
|
func BuildDagFromReader(ds ipld.DAGService, spl chunker.Splitter) (ipld.Node, error) {
|
|
dbp := h.DagBuilderParams{
|
|
Dagserv: ds,
|
|
Maxlinks: h.DefaultLinksPerBlock,
|
|
}
|
|
|
|
return bal.Layout(dbp.New(spl))
|
|
}
|
|
|
|
// BuildTrickleDagFromReader creates a DAG given a DAGService and a Splitter
|
|
// implementation (Splitters are io.Readers), using a Trickle Layout.
|
|
func BuildTrickleDagFromReader(ds ipld.DAGService, spl chunker.Splitter) (ipld.Node, error) {
|
|
dbp := h.DagBuilderParams{
|
|
Dagserv: ds,
|
|
Maxlinks: h.DefaultLinksPerBlock,
|
|
}
|
|
|
|
return trickle.Layout(dbp.New(spl))
|
|
}
|