Skip to content

Commit 5c8580d

Browse files
authored
Merge pull request #5506 from kjzz/fix/lock
add pin lock in AddallPin function
2 parents 9569f99 + dde1141 commit 5c8580d

File tree

3 files changed

+41
-37
lines changed

3 files changed

+41
-37
lines changed

core/commands/add.go

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ You can now check what blocks have been created by:
270270
fileAdder.Hidden = hidden
271271
fileAdder.Trickle = trickle
272272
fileAdder.Wrap = wrap
273-
fileAdder.Pin = dopin
273+
fileAdder.Pin = dopin && !hash
274274
fileAdder.Silent = silent
275275
fileAdder.RawLeaves = rawblks
276276
fileAdder.NoCopy = nocopy
@@ -297,42 +297,12 @@ You can now check what blocks have been created by:
297297
fileAdder.SetMfsRoot(mr)
298298
}
299299

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-
330300
errCh := make(chan error)
331301
go func() {
332302
var err error
333303
defer func() { errCh <- err }()
334304
defer close(outChan)
335-
err = addAllAndPin(req.Files)
305+
err = fileAdder.AddAllAndPin(req.Files)
336306
}()
337307

338308
err = res.Emit(outChan)

core/coreunix/add.go

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,8 +398,8 @@ func (adder *Adder) addNode(node ipld.Node, path string) error {
398398
return nil
399399
}
400400

401-
// AddFile adds the given file while respecting the adder.
402-
func (adder *Adder) AddFile(file files.File) error {
401+
// AddAllAndPin adds the given request's files and pin them.
402+
func (adder *Adder) AddAllAndPin(file files.File) error {
403403
if adder.Pin {
404404
adder.unlocker = adder.blockstore.PinLock()
405405
}
@@ -409,7 +409,41 @@ func (adder *Adder) AddFile(file files.File) error {
409409
}
410410
}()
411411

412-
return adder.addFile(file)
412+
switch {
413+
case file.IsDirectory():
414+
// Iterate over each top-level file and add individually. Otherwise the
415+
// single files.File f is treated as a directory, affecting hidden file
416+
// semantics.
417+
for {
418+
file, err := file.NextFile()
419+
if err == io.EOF {
420+
// Finished the list of files.
421+
break
422+
} else if err != nil {
423+
return err
424+
}
425+
if err := adder.addFile(file); err != nil {
426+
return err
427+
}
428+
}
429+
break
430+
default:
431+
if err := adder.addFile(file); err != nil {
432+
return err
433+
}
434+
break
435+
}
436+
437+
// copy intermediary nodes from editor to our actual dagservice
438+
_, err := adder.Finalize()
439+
if err != nil {
440+
return err
441+
}
442+
443+
if !adder.Pin {
444+
return nil
445+
}
446+
return adder.PinRoot()
413447
}
414448

415449
func (adder *Adder) addFile(file files.File) error {

core/coreunix/add_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func TestAddGCLive(t *testing.T) {
8585
go func() {
8686
defer close(addDone)
8787
defer close(out)
88-
err := adder.AddFile(slf)
88+
err := adder.AddAllAndPin(slf)
8989

9090
if err != nil {
9191
t.Fatal(err)
@@ -191,7 +191,7 @@ func testAddWPosInfo(t *testing.T, rawLeaves bool) {
191191

192192
go func() {
193193
defer close(adder.Out)
194-
err = adder.AddFile(file)
194+
err = adder.AddAllAndPin(file)
195195
if err != nil {
196196
t.Fatal(err)
197197
}

0 commit comments

Comments
 (0)