add pin lock in AddallPin function
License: MIT Signed-off-by: Kejie Zhang <601172892@qq.com>
Kejie Zhang committed
Sep 21, 2018 at 14:55 UTC
1379ee76f36468ce646750afa008ede66b25c5b9
3 files changed
+42
-36
core/commands/add.go
+2
-31
@@ -276,6 +276,7 @@ You can now check what blocks have been created by:
276
fileAdder.NoCopy = nocopy
277
fileAdder.Name = pathName
278
fileAdder.CidBuilder = prefix
279
+ fileAdder.Hash = hash
280
281
if inline {
282
fileAdder.CidBuilder = cidutil.InlineBuilder{
@@ -297,42 +298,12 @@ You can now check what blocks have been created by:
298
fileAdder.SetMfsRoot(mr)
299
}
300
300
- addAllAndPin := func(f files.File) error {
301
- // Iterate over each top-level file and add individually. Otherwise the
302
- // single files.File f is treated as a directory, affecting hidden file
303
- // semantics.
304
- for {
305
- file, err := f.NextFile()
306
- if err == io.EOF {
307
- // Finished the list of files.
308
- break
309
- } else if err != nil {
310
- return err
311
- }
312
- if err := fileAdder.AddFile(file); err != nil {
313
- return err
314
- }
315
- }
316
-
317
- // copy intermediary nodes from editor to our actual dagservice
318
- _, err := fileAdder.Finalize()
319
- if err != nil {
320
- return err
321
- }
322
-
323
- if hash {
324
- return nil
325
- }
326
-
327
- return fileAdder.PinRoot()
328
- }
329
-
301
errCh := make(chan error)
302
go func() {
303
var err error
304
defer func() { errCh <- err }()
305
defer close(outChan)
335
- err = addAllAndPin(req.Files)
306
+ err = fileAdder.AddAllAndPin(req.Files)
307
}()
308
309
err = res.Emit(outChan)
core/coreunix/add.go
+38
-3
@@ -86,6 +86,7 @@ type Adder struct {
86
Name string
87
NoCopy bool
88
Chunker string
89
+ Hash bool
90
root ipld.Node
91
mroot *mfs.Root
92
unlocker bstore.Unlocker
@@ -398,8 +399,8 @@ func (adder *Adder) addNode(node ipld.Node, path string) error {
399
return nil
400
}
401
401
-// AddFile adds the given file while respecting the adder.
402
-func (adder *Adder) AddFile(file files.File) error {
402
+// AddAllAndPin adds the given request's files and pin them.
403
+func (adder *Adder) AddAllAndPin(file files.File) error {
404
if adder.Pin {
405
adder.unlocker = adder.blockstore.PinLock()
406
}
@@ -409,7 +410,41 @@ func (adder *Adder) AddFile(file files.File) error {
410
}
411
}()
412
412
- return adder.addFile(file)
413
+ switch {
414
+ case file.IsDirectory():
415
+ // Iterate over each top-level file and add individually. Otherwise the
416
+ // single files.File f is treated as a directory, affecting hidden file
417
+ // semantics.
418
+ for {
419
+ file, err := file.NextFile()
420
+ if err == io.EOF {
421
+ // Finished the list of files.
422
+ break
423
+ } else if err != nil {
424
+ return err
425
+ }
426
+ if err := adder.addFile(file); err != nil {
427
+ return err
428
+ }
429
+ }
430
+ break
431
+ default:
432
+ if err := adder.addFile(file); err != nil {
433
+ return err
434
+ }
435
+ break
436
+ }
437
+
438
+ // copy intermediary nodes from editor to our actual dagservice
439
+ _, err := adder.Finalize()
440
+ if err != nil {
441
+ return err
442
+ }
443
+
444
+ if adder.Hash {
445
+ return nil
446
+ }
447
+ return adder.PinRoot()
448
}
449
450
func (adder *Adder) addFile(file files.File) error {
core/coreunix/add_test.go
+2
-2
@@ -85,7 +85,7 @@ func TestAddGCLive(t *testing.T) {
85
go func() {
86
defer close(addDone)
87
defer close(out)
88
- err := adder.AddFile(slf)
88
+ err := adder.AddAllAndPin(slf)
89
90
if err != nil {
91
t.Fatal(err)
@@ -191,7 +191,7 @@ func testAddWPosInfo(t *testing.T, rawLeaves bool) {
191
192
go func() {
193
defer close(adder.Out)
194
- err = adder.AddFile(file)
194
+ err = adder.AddAllAndPin(file)
195
if err != nil {
196
t.Fatal(err)
197
}