Commit 00575204 authored by Łukasz Magiera's avatar Łukasz Magiera

block put --pin option

License: MIT
Signed-off-by: default avatarŁukasz Magiera <magik6k@gmail.com>
parent e8196db4
...@@ -10,6 +10,7 @@ type BlockPutSettings struct { ...@@ -10,6 +10,7 @@ type BlockPutSettings struct {
Codec string Codec string
MhType uint64 MhType uint64
MhLength int MhLength int
Pin bool
} }
type BlockRmSettings struct { type BlockRmSettings struct {
...@@ -24,6 +25,7 @@ func BlockPutOptions(opts ...BlockPutOption) (*BlockPutSettings, cid.Prefix, err ...@@ -24,6 +25,7 @@ func BlockPutOptions(opts ...BlockPutOption) (*BlockPutSettings, cid.Prefix, err
Codec: "", Codec: "",
MhType: mh.SHA2_256, MhType: mh.SHA2_256,
MhLength: -1, MhLength: -1,
Pin: false,
} }
for _, opt := range opts { for _, opt := range opts {
...@@ -105,6 +107,15 @@ func (blockOpts) Hash(mhType uint64, mhLen int) BlockPutOption { ...@@ -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 // Force is an option for Block.Rm which, when set to true, will ignore
// non-existing blocks // non-existing blocks
func (blockOpts) Force(force bool) BlockRmOption { func (blockOpts) Force(force bool) BlockRmOption {
......
...@@ -26,6 +26,7 @@ func (tp *provider) TestBlock(t *testing.T) { ...@@ -26,6 +26,7 @@ func (tp *provider) TestBlock(t *testing.T) {
t.Run("TestBlockGet", tp.TestBlockGet) t.Run("TestBlockGet", tp.TestBlockGet)
t.Run("TestBlockRm", tp.TestBlockRm) t.Run("TestBlockRm", tp.TestBlockRm)
t.Run("TestBlockStat", tp.TestBlockStat) t.Run("TestBlockStat", tp.TestBlockStat)
t.Run("TestBlockPin", tp.TestBlockPin)
} }
func (tp *provider) TestBlockPut(t *testing.T) { func (tp *provider) TestBlockPut(t *testing.T) {
...@@ -203,3 +204,40 @@ func (tp *provider) TestBlockStat(t *testing.T) { ...@@ -203,3 +204,40 @@ func (tp *provider) TestBlockStat(t *testing.T) {
t.Error("length doesn't match") 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")
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment