mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-13 12:18:00 +08:00
block put --pin option
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com> This commit was moved from ipfs/interface-go-ipfs-core@005752045c This commit was moved from ipfs/boxo@9ea89f3860
This commit is contained in:
parent
eac8515c0b
commit
abebd4e1d8
@ -10,6 +10,7 @@ type BlockPutSettings struct {
|
||||
Codec string
|
||||
MhType uint64
|
||||
MhLength int
|
||||
Pin bool
|
||||
}
|
||||
|
||||
type BlockRmSettings struct {
|
||||
@ -24,6 +25,7 @@ func BlockPutOptions(opts ...BlockPutOption) (*BlockPutSettings, cid.Prefix, err
|
||||
Codec: "",
|
||||
MhType: mh.SHA2_256,
|
||||
MhLength: -1,
|
||||
Pin: false,
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
@ -105,6 +107,15 @@ func (blockOpts) Hash(mhType uint64, mhLen int) BlockPutOption {
|
||||
}
|
||||
}
|
||||
|
||||
// Pin is an option for Block.Put which specifies whether to (recursively) pin
|
||||
// added blocks
|
||||
func (blockOpts) Pin(pin bool) BlockPutOption {
|
||||
return func(settings *BlockPutSettings) error {
|
||||
settings.Pin = pin
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// Force is an option for Block.Rm which, when set to true, will ignore
|
||||
// non-existing blocks
|
||||
func (blockOpts) Force(force bool) BlockRmOption {
|
||||
|
||||
@ -26,6 +26,7 @@ func (tp *provider) TestBlock(t *testing.T) {
|
||||
t.Run("TestBlockGet", tp.TestBlockGet)
|
||||
t.Run("TestBlockRm", tp.TestBlockRm)
|
||||
t.Run("TestBlockStat", tp.TestBlockStat)
|
||||
t.Run("TestBlockPin", tp.TestBlockPin)
|
||||
}
|
||||
|
||||
func (tp *provider) TestBlockPut(t *testing.T) {
|
||||
@ -203,3 +204,40 @@ func (tp *provider) TestBlockStat(t *testing.T) {
|
||||
t.Error("length doesn't match")
|
||||
}
|
||||
}
|
||||
|
||||
func (tp *provider) TestBlockPin(t *testing.T) {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
api, err := tp.makeAPI(ctx)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
_, err = api.Block().Put(ctx, strings.NewReader(`Hello`))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if pins, err := api.Pin().Ls(ctx); err != nil || len(pins) != 0 {
|
||||
t.Fatal("expected 0 pins")
|
||||
}
|
||||
|
||||
res, err := api.Block().Put(ctx, strings.NewReader(`Hello`), opt.Block.Pin(true))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
pins, err := api.Pin().Ls(ctx)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if len(pins) != 1 {
|
||||
t.Fatal("expected 1 pin")
|
||||
}
|
||||
if pins[0].Type() != "recursive" {
|
||||
t.Error("expected a recursive pin")
|
||||
}
|
||||
if pins[0].Path().String() != res.Path().String() {
|
||||
t.Error("pin path didn't match")
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user