mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-21 19:50:56 +08:00
coreapi unixfs: layout/chunker options
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
This commit is contained in:
@ -4,6 +4,13 @@ import (
|
||||
mh "gx/ipfs/QmPnFwZ2JXKnXgMw8CdBPxn7FWh6LLdjUjxV1fKHuJnkr8/go-multihash"
|
||||
)
|
||||
|
||||
type Layout int
|
||||
|
||||
const (
|
||||
BalancedLayout Layout = iota
|
||||
TrickleLeyout
|
||||
)
|
||||
|
||||
type UnixfsAddSettings struct {
|
||||
CidVersion int
|
||||
MhType uint64
|
||||
@ -11,6 +18,9 @@ type UnixfsAddSettings struct {
|
||||
InlineLimit int
|
||||
RawLeaves bool
|
||||
RawLeavesSet bool
|
||||
|
||||
Chunker string
|
||||
Layout Layout
|
||||
}
|
||||
|
||||
type UnixfsAddOption func(*UnixfsAddSettings) error
|
||||
@ -23,6 +33,9 @@ func UnixfsAddOptions(opts ...UnixfsAddOption) (*UnixfsAddSettings, error) {
|
||||
InlineLimit: 0,
|
||||
RawLeaves: false,
|
||||
RawLeavesSet: false,
|
||||
|
||||
Chunker: "size-262144",
|
||||
Layout: BalancedLayout,
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
@ -67,3 +80,17 @@ func (unixfsOpts) InlineLimit(limit int) UnixfsAddOption {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (unixfsOpts) Chunker(chunker string) UnixfsAddOption {
|
||||
return func(settings *UnixfsAddSettings) error {
|
||||
settings.Chunker = chunker
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (unixfsOpts) Layout(layout Layout) UnixfsAddOption {
|
||||
return func(settings *UnixfsAddSettings) error {
|
||||
settings.Layout = layout
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
@ -68,10 +68,9 @@ func (api *UnixfsAPI) Add(ctx context.Context, r io.ReadCloser, opts ...options.
|
||||
}
|
||||
|
||||
fileAdder.Out = outChan
|
||||
//fileAdder.Chunker = chunker
|
||||
fileAdder.Chunker = settings.Chunker
|
||||
//fileAdder.Progress = progress
|
||||
//fileAdder.Hidden = hidden
|
||||
//fileAdder.Trickle = trickle
|
||||
//fileAdder.Wrap = wrap
|
||||
//fileAdder.Pin = dopin
|
||||
fileAdder.Silent = false
|
||||
@ -80,6 +79,15 @@ func (api *UnixfsAPI) Add(ctx context.Context, r io.ReadCloser, opts ...options.
|
||||
//fileAdder.Name = pathName
|
||||
fileAdder.CidBuilder = prefix
|
||||
|
||||
switch settings.Layout {
|
||||
case options.BalancedLayout:
|
||||
// Default
|
||||
case options.TrickleLeyout:
|
||||
fileAdder.Trickle = true
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown layout: %d", settings.Layout)
|
||||
}
|
||||
|
||||
if settings.InlineLimit > 0 {
|
||||
fileAdder.CidBuilder = cidutil.InlineBuilder{
|
||||
Builder: fileAdder.CidBuilder,
|
||||
|
@ -191,6 +191,19 @@ func TestAdd(t *testing.T) {
|
||||
path: "/ipfs/zj7Gr8AcBreqGEfrnR5kPFe",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.InlineLimit(32), options.Unixfs.RawLeaves(true)},
|
||||
},
|
||||
// Chunker / Layout
|
||||
{
|
||||
name: "addChunks",
|
||||
data: strings.Repeat("aoeuidhtns", 200),
|
||||
path: "/ipfs/QmRo11d4QJrST47aaiGVJYwPhoNA4ihRpJ5WaxBWjWDwbX",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Chunker("size-4")},
|
||||
},
|
||||
{
|
||||
name: "addChunksTrickle",
|
||||
data: strings.Repeat("aoeuidhtns", 200),
|
||||
path: "/ipfs/QmNNhDGttafX3M1wKWixGre6PrLFGjnoPEDXjBYpTv93HP",
|
||||
opts: []options.UnixfsAddOption{options.Unixfs.Chunker("size-4"), options.Unixfs.Layout(options.TrickleLeyout)},
|
||||
},
|
||||
}
|
||||
|
||||
for _, testCase := range cases {
|
||||
@ -211,7 +224,7 @@ func TestAdd(t *testing.T) {
|
||||
}
|
||||
|
||||
if p.String() != testCase.path {
|
||||
t.Fatalf("expected path %s, got: %s", hello, p)
|
||||
t.Errorf("expected path %s, got: %s", testCase.path, p)
|
||||
}
|
||||
|
||||
r, err := api.Unixfs().Cat(ctx, p)
|
||||
|
Reference in New Issue
Block a user