mirror of
https://github.com/ipfs/kubo.git
synced 2025-08-06 19:44:01 +08:00
add pin lock in AddallPin function
License: MIT Signed-off-by: Kejie Zhang <601172892@qq.com>
This commit is contained in:

committed by
Steven Allen

parent
49bb9fba2a
commit
1379ee76f3
@ -276,6 +276,7 @@ You can now check what blocks have been created by:
|
|||||||
fileAdder.NoCopy = nocopy
|
fileAdder.NoCopy = nocopy
|
||||||
fileAdder.Name = pathName
|
fileAdder.Name = pathName
|
||||||
fileAdder.CidBuilder = prefix
|
fileAdder.CidBuilder = prefix
|
||||||
|
fileAdder.Hash = hash
|
||||||
|
|
||||||
if inline {
|
if inline {
|
||||||
fileAdder.CidBuilder = cidutil.InlineBuilder{
|
fileAdder.CidBuilder = cidutil.InlineBuilder{
|
||||||
@ -297,42 +298,12 @@ You can now check what blocks have been created by:
|
|||||||
fileAdder.SetMfsRoot(mr)
|
fileAdder.SetMfsRoot(mr)
|
||||||
}
|
}
|
||||||
|
|
||||||
addAllAndPin := func(f files.File) error {
|
|
||||||
// Iterate over each top-level file and add individually. Otherwise the
|
|
||||||
// single files.File f is treated as a directory, affecting hidden file
|
|
||||||
// semantics.
|
|
||||||
for {
|
|
||||||
file, err := f.NextFile()
|
|
||||||
if err == io.EOF {
|
|
||||||
// Finished the list of files.
|
|
||||||
break
|
|
||||||
} else if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := fileAdder.AddFile(file); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// copy intermediary nodes from editor to our actual dagservice
|
|
||||||
_, err := fileAdder.Finalize()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if hash {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return fileAdder.PinRoot()
|
|
||||||
}
|
|
||||||
|
|
||||||
errCh := make(chan error)
|
errCh := make(chan error)
|
||||||
go func() {
|
go func() {
|
||||||
var err error
|
var err error
|
||||||
defer func() { errCh <- err }()
|
defer func() { errCh <- err }()
|
||||||
defer close(outChan)
|
defer close(outChan)
|
||||||
err = addAllAndPin(req.Files)
|
err = fileAdder.AddAllAndPin(req.Files)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
err = res.Emit(outChan)
|
err = res.Emit(outChan)
|
||||||
|
@ -86,6 +86,7 @@ type Adder struct {
|
|||||||
Name string
|
Name string
|
||||||
NoCopy bool
|
NoCopy bool
|
||||||
Chunker string
|
Chunker string
|
||||||
|
Hash bool
|
||||||
root ipld.Node
|
root ipld.Node
|
||||||
mroot *mfs.Root
|
mroot *mfs.Root
|
||||||
unlocker bstore.Unlocker
|
unlocker bstore.Unlocker
|
||||||
@ -398,8 +399,8 @@ func (adder *Adder) addNode(node ipld.Node, path string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddFile adds the given file while respecting the adder.
|
// AddAllAndPin adds the given request's files and pin them.
|
||||||
func (adder *Adder) AddFile(file files.File) error {
|
func (adder *Adder) AddAllAndPin(file files.File) error {
|
||||||
if adder.Pin {
|
if adder.Pin {
|
||||||
adder.unlocker = adder.blockstore.PinLock()
|
adder.unlocker = adder.blockstore.PinLock()
|
||||||
}
|
}
|
||||||
@ -409,7 +410,41 @@ func (adder *Adder) AddFile(file files.File) error {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return adder.addFile(file)
|
switch {
|
||||||
|
case file.IsDirectory():
|
||||||
|
// Iterate over each top-level file and add individually. Otherwise the
|
||||||
|
// single files.File f is treated as a directory, affecting hidden file
|
||||||
|
// semantics.
|
||||||
|
for {
|
||||||
|
file, err := file.NextFile()
|
||||||
|
if err == io.EOF {
|
||||||
|
// Finished the list of files.
|
||||||
|
break
|
||||||
|
} else if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := adder.addFile(file); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
if err := adder.addFile(file); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// copy intermediary nodes from editor to our actual dagservice
|
||||||
|
_, err := adder.Finalize()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if adder.Hash {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return adder.PinRoot()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (adder *Adder) addFile(file files.File) error {
|
func (adder *Adder) addFile(file files.File) error {
|
||||||
|
@ -85,7 +85,7 @@ func TestAddGCLive(t *testing.T) {
|
|||||||
go func() {
|
go func() {
|
||||||
defer close(addDone)
|
defer close(addDone)
|
||||||
defer close(out)
|
defer close(out)
|
||||||
err := adder.AddFile(slf)
|
err := adder.AddAllAndPin(slf)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@ -191,7 +191,7 @@ func testAddWPosInfo(t *testing.T, rawLeaves bool) {
|
|||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
defer close(adder.Out)
|
defer close(adder.Out)
|
||||||
err = adder.AddFile(file)
|
err = adder.AddAllAndPin(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user