Skip to content

Commit ab66de0

Browse files
committed
ipfs: all - retain ReadDir errors across calls
1 parent b4a5c7e commit ab66de0

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

internal/filesystem/ipfs/ipfs.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ type (
4444
ipfsDirectory struct {
4545
stream *entryStream
4646
info *nodeInfo
47+
err error
4748
cid cid.Cid
4849
}
4950
)
@@ -483,6 +484,9 @@ func (id *ipfsDirectory) StreamDir() <-chan filesystem.StreamDirEntry {
483484

484485
func (id *ipfsDirectory) ReadDir(count int) ([]fs.DirEntry, error) {
485486
const op = "ipfsDirectory.ReadDir"
487+
if err := id.err; err != nil {
488+
return nil, err
489+
}
486490
stream := id.stream
487491
if stream == nil {
488492
// TODO: We don't have an error kind
@@ -497,6 +501,7 @@ func (id *ipfsDirectory) ReadDir(count int) ([]fs.DirEntry, error) {
497501
if err != nil {
498502
stream.ch = nil
499503
err = readdirErr(op, id.info.name, err)
504+
id.err = err
500505
}
501506
return entries, err
502507
}

internal/filesystem/ipfs/keyfs.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type (
2626
keyDirectory struct {
2727
ipns fs.FS
2828
stream *entryStream
29+
err error
2930
mode fs.FileMode
3031
}
3132
keyDirEntry struct {
@@ -186,6 +187,9 @@ func (kd *keyDirectory) Sys() any { return kd }
186187

187188
func (kd *keyDirectory) ReadDir(count int) ([]fs.DirEntry, error) {
188189
const op = "keyDirectory.ReadDir"
190+
if err := kd.err; err != nil {
191+
return nil, err
192+
}
189193
stream := kd.stream
190194
if stream == nil {
191195
return nil, fserrors.New(op, filesystem.Root, filesystem.ErrNotOpen, fserrors.IO)
@@ -201,6 +205,7 @@ func (kd *keyDirectory) ReadDir(count int) ([]fs.DirEntry, error) {
201205
if err != nil {
202206
stream.ch = nil
203207
err = readdirErr(op, filesystem.Root, err)
208+
kd.err = err
204209
}
205210
return ents, err
206211
}

internal/filesystem/ipfs/pinfs.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type (
3636
pinDirectory struct {
3737
*pinShared
3838
stream *entryStream
39+
err error
3940
}
4041
pinDirEntry struct {
4142
coreiface.Pin
@@ -277,6 +278,9 @@ func (*pinDirectory) Read([]byte) (int, error) {
277278

278279
func (pd *pinDirectory) ReadDir(count int) ([]fs.DirEntry, error) {
279280
const op = "pinDirectory.ReadDir"
281+
if err := pd.err; err != nil {
282+
return nil, err
283+
}
280284
stream := pd.stream
281285
if stream == nil {
282286
// TODO: We don't have an error kind
@@ -291,6 +295,7 @@ func (pd *pinDirectory) ReadDir(count int) ([]fs.DirEntry, error) {
291295
if err != nil {
292296
stream.ch = nil
293297
err = readdirErr(op, filesystem.Root, err)
298+
pd.err = err
294299
}
295300
return entries, err
296301
}

0 commit comments

Comments
 (0)