Skip to content

Commit 216e122

Browse files
committed
fine tune
1 parent 79350b4 commit 216e122

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

modules/assetfs/embed.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121

2222
type EmbeddedFile interface {
2323
io.ReadSeeker
24-
fs.File
24+
fs.ReadDirFile
2525
ReadDir(n int) ([]fs.DirEntry, error)
2626
}
2727

@@ -50,6 +50,7 @@ type embeddedFileInfo struct {
5050
}
5151

5252
func (fi *embeddedFileInfo) GetGzipContent() ([]byte, bool) {
53+
// when generating the bindata, if the compressed data equals or is larger than the original data, we store the original data
5354
if fi.DataLen == fi.OriginSize {
5455
return nil, false
5556
}
@@ -63,6 +64,7 @@ type EmbeddedFileBase struct {
6364
}
6465

6566
func (f *EmbeddedFileBase) ReadDir(n int) ([]fs.DirEntry, error) {
67+
// this method is used to satisfy the "func (f ioFile) ReadDir(...)" in httpfs
6668
l, err := f.info.fs.ReadDir(f.info.fullName)
6769
if err != nil {
6870
return nil, err
@@ -83,10 +85,6 @@ type EmbeddedCompressedFile struct {
8385
decompressorPos int64
8486
}
8587

86-
func (f *EmbeddedCompressedFile) GzipBytes() []byte {
87-
return f.info.data
88-
}
89-
9088
type embeddedFS struct {
9189
meta func() *EmbeddedMeta
9290

@@ -336,20 +334,19 @@ func GenerateEmbedBindata(fsRootPath, outputFile string) error {
336334
if err = gz.Close(); err != nil {
337335
return err
338336
}
339-
outputBytes := util.Iif(len(compressed.Bytes()) < len(data), compressed.Bytes(), data)
340337

338+
// only use the compressed data if it is smaller than the original data
339+
outputBytes := util.Iif(len(compressed.Bytes()) < len(data), compressed.Bytes(), data)
341340
child := &embeddedFileInfo{
342341
BaseName: dirEntry.Name(),
343342
OriginSize: int64(len(data)),
344343
DataBegin: outputOffset,
345344
DataLen: int64(len(outputBytes)),
346345
}
347-
348346
if _, err = output.Write(outputBytes); err != nil {
349347
return err
350348
}
351349
outputOffset += child.DataLen
352-
353350
parent.Children = append(parent.Children, child)
354351
}
355352
}

modules/assetfs/embed_test.go

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,38 @@ func TestEmbed(t *testing.T) {
2727
require.NoError(t, err)
2828
efs := NewEmbeddedFS(data)
2929

30+
// test a non-existing file
3031
_, err = fs.ReadFile(efs, "not exist")
3132
assert.ErrorIs(t, err, fs.ErrNotExist)
3233

34+
// test a normal file (no compression)
3335
content, err := fs.ReadFile(efs, "a.txt")
3436
require.NoError(t, err)
3537
assert.Equal(t, "a", string(content))
38+
fi, err := fs.Stat(efs, "a.txt")
39+
require.NoError(t, err)
40+
_, ok := fi.(EmbeddedFileInfo).GetGzipContent()
41+
assert.False(t, ok)
3642

43+
// test a compressed file
3744
content, err = fs.ReadFile(efs, "foo/bar/b.txt")
3845
require.NoError(t, err)
3946
assert.Equal(t, bytes.Repeat([]byte("a"), 1000), content)
47+
fi, err = fs.Stat(efs, "foo/bar/b.txt")
48+
require.NoError(t, err)
49+
gzipContent, ok := fi.(EmbeddedFileInfo).GetGzipContent()
50+
assert.True(t, ok)
51+
assert.Greater(t, len(gzipContent), 1)
52+
assert.Less(t, len(gzipContent), 1000)
4053

54+
// test list root directory
4155
entries, err := fs.ReadDir(efs, ".")
4256
require.NoError(t, err)
4357
assert.Len(t, entries, 2)
58+
assert.Equal(t, "a.txt", entries[0].Name())
59+
assert.False(t, entries[0].IsDir())
4460

61+
// test list subdirectory
4562
entries, err = fs.ReadDir(efs, "foo")
4663
require.NoError(t, err)
4764
require.Len(t, entries, 2)
@@ -50,21 +67,23 @@ func TestEmbed(t *testing.T) {
5067
assert.Equal(t, "c.txt", entries[1].Name())
5168
assert.False(t, entries[1].IsDir())
5269

53-
entries, err = fs.ReadDir(efs, "foo/bar")
54-
require.NoError(t, err)
55-
require.Len(t, entries, 1)
56-
assert.Equal(t, "b.txt", entries[0].Name())
57-
assert.False(t, entries[0].IsDir())
58-
70+
// test httpfs
5971
hfs := http.FS(efs)
6072
hf, err := hfs.Open("foo/bar/b.txt")
6173
require.NoError(t, err)
6274
hi, err := hf.Stat()
6375
require.NoError(t, err)
64-
fi, ok := hi.(EmbeddedFileInfo)
76+
fiEmbedded, ok := hi.(EmbeddedFileInfo)
6577
require.True(t, ok)
66-
gzipContent, ok := fi.GetGzipContent()
78+
gzipContent, ok = fiEmbedded.GetGzipContent()
6779
assert.True(t, ok)
6880
assert.Greater(t, len(gzipContent), 1)
6981
assert.Less(t, len(gzipContent), 1000)
82+
83+
// test httpfs directory listing
84+
hf, err = hfs.Open("foo")
85+
require.NoError(t, err)
86+
dirs, err := hf.Readdir(1)
87+
require.NoError(t, err)
88+
assert.Len(t, dirs, 1)
7089
}

0 commit comments

Comments
 (0)