From fb1461fd0b08f893ca796bfdd79a5badadbe5288 Mon Sep 17 00:00:00 2001 From: Deluan Date: Thu, 5 Nov 2020 13:34:56 -0500 Subject: [PATCH] Fix reading dirs from a MergeFS --- utils/merge_fs.go | 10 +++++----- utils/merge_fs_test.go | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/utils/merge_fs.go b/utils/merge_fs.go index 8392bc7a..f0f5694b 100644 --- a/utils/merge_fs.go +++ b/utils/merge_fs.go @@ -90,7 +90,7 @@ type mergedDir struct { pos int } -func (d mergedDir) Readdir(count int) ([]os.FileInfo, error) { +func (d *mergedDir) Readdir(count int) ([]os.FileInfo, error) { if d.pos >= len(d.entries) && count > 0 { return nil, io.EOF } @@ -102,12 +102,12 @@ func (d mergedDir) Readdir(count int) ([]os.FileInfo, error) { return e, nil } -func (d mergedDir) Close() error { return nil } -func (d mergedDir) Stat() (os.FileInfo, error) { return d.info, nil } -func (d mergedDir) Read(p []byte) (n int, err error) { +func (d *mergedDir) Close() error { return nil } +func (d *mergedDir) Stat() (os.FileInfo, error) { return d.info, nil } +func (d *mergedDir) Read(p []byte) (n int, err error) { return 0, fmt.Errorf("cannot Read from directory %s", d.name) } -func (d mergedDir) Seek(offset int64, whence int) (int64, error) { +func (d *mergedDir) Seek(offset int64, whence int) (int64, error) { if offset == 0 && whence == io.SeekStart { d.pos = 0 return 0, nil diff --git a/utils/merge_fs_test.go b/utils/merge_fs_test.go index cd86e360..2ab34e69 100644 --- a/utils/merge_fs_test.go +++ b/utils/merge_fs_test.go @@ -1,6 +1,7 @@ package utils_test import ( + "io" "io/ioutil" "net/http" "os" @@ -73,6 +74,27 @@ var _ = Describe("mergeFS", func() { Expect(list[0].Name()).To(Equal("1111.txt")) Expect(list[1].Name()).To(Equal("2222.json")) }) + + It("allows to seek to the beginning of the directory", func() { + _f(baseName, "1111") + _f(baseName, "2222") + _f(baseName, "3333") + + dir, err := mergedDir.Open(".") + Expect(err).To(BeNil()) + + list, _ := dir.Readdir(2) + Expect(list).To(HaveLen(2)) + Expect(list[0].Name()).To(Equal("1111")) + Expect(list[1].Name()).To(Equal("2222")) + + Expect(dir.Seek(0, io.SeekStart)).To(Equal(int64(0))) + + list, _ = dir.Readdir(2) + Expect(list).To(HaveLen(2)) + Expect(list[0].Name()).To(Equal("1111")) + Expect(list[1].Name()).To(Equal("2222")) + }) }) func _f(dir, name string, content ...string) string {