diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/http/server.go | 4 | ||||
| -rw-r--r-- | lib/memfs/doc.go | 1 | ||||
| -rw-r--r-- | lib/memfs/embed.go | 7 | ||||
| -rw-r--r-- | lib/memfs/embed_options.go | 9 | ||||
| -rw-r--r-- | lib/memfs/internal/test/embed/embed_test.go | 17 | ||||
| -rw-r--r-- | lib/memfs/internal/test/embed_disable_modtime/embed_test.go | 17 | ||||
| -rw-r--r-- | lib/memfs/memfs.go | 76 | ||||
| -rw-r--r-- | lib/memfs/node.go | 92 | ||||
| -rw-r--r-- | lib/memfs/node_test.go | 14 | ||||
| -rw-r--r-- | lib/memfs/template.go | 1 |
10 files changed, 10 insertions, 228 deletions
diff --git a/lib/http/server.go b/lib/http/server.go index bccc098e..a3c4e474 100644 --- a/lib/http/server.go +++ b/lib/http/server.go @@ -494,10 +494,6 @@ func (srv *Server) HandleFS(res http.ResponseWriter, req *http.Request) { res.Header().Set(HeaderContentType, node.ContentType) - if len(node.ContentEncoding) > 0 { - res.Header().Set(HeaderContentEncoding, node.ContentEncoding) - } - responseETag := strconv.FormatInt(node.ModTime().Unix(), 10) requestETag := req.Header.Get(HeaderIfNoneMatch) if requestETag == responseETag { diff --git a/lib/memfs/doc.go b/lib/memfs/doc.go index da62aed2..56aa1083 100644 --- a/lib/memfs/doc.go +++ b/lib/memfs/doc.go @@ -80,7 +80,6 @@ // PackageName: "mypackage", // VarName: "myFS", // GoFileName: "mypackage/embed.go", -// ContentEncoding: memfs.EncodingGzip, // }, // } // mfs, _ := memfs.New(opts) diff --git a/lib/memfs/embed.go b/lib/memfs/embed.go index 7cadcc47..6712fdad 100644 --- a/lib/memfs/embed.go +++ b/lib/memfs/embed.go @@ -52,13 +52,6 @@ func (mfs *MemFS) GoEmbed() (err error) { return fmt.Errorf("%s: %w", logp, err) } - if len(mfs.Opts.Embed.ContentEncoding) > 0 { - err = mfs.ContentEncode(mfs.Opts.Embed.ContentEncoding) - if err != nil { - return fmt.Errorf("%s: %w", logp, err) - } - } - names := mfs.ListNames() err = tmpl.ExecuteTemplate(f, templateNameHeader, mfs.Opts.Embed.PackageName) diff --git a/lib/memfs/embed_options.go b/lib/memfs/embed_options.go index 67d45f57..b1522276 100644 --- a/lib/memfs/embed_options.go +++ b/lib/memfs/embed_options.go @@ -21,15 +21,6 @@ type EmbedOptions struct { // in current directory from where its called. GoFileName string - // ContentEncoding if this value is not empty, it will encode the - // content of node and set the node ContentEncoding. - // - // List of available encoding is "gzip". - // - // For example, if the value is "gzip" it will compress the content of - // file using gzip and set Node.ContentEncoding to "gzip". - ContentEncoding string - // WithoutModTime if its true, the modification time for all // files and directories are not stored inside generated code, instead // all files will use the current time when the program is running. diff --git a/lib/memfs/internal/test/embed/embed_test.go b/lib/memfs/internal/test/embed/embed_test.go index d66da751..27be6ba7 100644 --- a/lib/memfs/internal/test/embed/embed_test.go +++ b/lib/memfs/internal/test/embed/embed_test.go @@ -11,7 +11,6 @@ func generate_testdata() *memfs.Node { SysPath: "testdata", Path: "/", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetModTimeUnix(1633772772, 881353676) @@ -32,7 +31,6 @@ func generate_testdata_direct() *memfs.Node { SysPath: "testdata/direct", Path: "/direct", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetModTimeUnix(1569586540, 0) @@ -47,7 +45,6 @@ func generate_testdata_direct_add() *memfs.Node { SysPath: "testdata/direct/add", Path: "/direct/add", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetModTimeUnix(1569586540, 0) @@ -63,7 +60,6 @@ func generate_testdata_direct_add_file() *memfs.Node { SysPath: "testdata/direct/add/file", Path: "/direct/add/file", ContentType: "text/plain; charset=utf-8", - ContentEncoding: "", Content: []byte("\x54\x65\x73\x74\x20\x64\x69\x72\x65\x63\x74\x20\x61\x64\x64\x20\x66\x69\x6C\x65\x2E\x0A"), } node.SetMode(420) @@ -78,7 +74,6 @@ func generate_testdata_direct_add_file2() *memfs.Node { SysPath: "testdata/direct/add/file2", Path: "/direct/add/file2", ContentType: "text/plain; charset=utf-8", - ContentEncoding: "", Content: []byte("\x54\x65\x73\x74\x20\x64\x69\x72\x65\x63\x74\x20\x61\x64\x64\x20\x66\x69\x6C\x65\x20\x32\x2E\x0A"), } node.SetMode(420) @@ -93,7 +88,6 @@ func generate_testdata_exclude() *memfs.Node { SysPath: "testdata/exclude", Path: "/exclude", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetModTimeUnix(1633792794, 467899662) @@ -110,7 +104,6 @@ func generate_testdata_exclude_index_link_css() *memfs.Node { SysPath: "testdata/exclude/index-link.css", Path: "/exclude/index-link.css", ContentType: "text/css; charset=utf-8", - ContentEncoding: "", Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"), } node.SetMode(420) @@ -125,7 +118,6 @@ func generate_testdata_exclude_index_link_html() *memfs.Node { SysPath: "testdata/exclude/index-link.html", Path: "/exclude/index-link.html", ContentType: "text/html; charset=utf-8", - ContentEncoding: "", Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"), } node.SetMode(420) @@ -140,7 +132,6 @@ func generate_testdata_exclude_index_link_js() *memfs.Node { SysPath: "testdata/exclude/index-link.js", Path: "/exclude/index-link.js", ContentType: "text/javascript; charset=utf-8", - ContentEncoding: "", Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"), } node.SetMode(420) @@ -155,7 +146,6 @@ func generate_testdata_include() *memfs.Node { SysPath: "testdata/include", Path: "/include", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetModTimeUnix(1629623653, 749800911) @@ -172,7 +162,6 @@ func generate_testdata_include_index_css() *memfs.Node { SysPath: "testdata/include/index.css", Path: "/include/index.css", ContentType: "text/css; charset=utf-8", - ContentEncoding: "", Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"), } node.SetMode(420) @@ -187,7 +176,6 @@ func generate_testdata_include_index_html() *memfs.Node { SysPath: "testdata/include/index.html", Path: "/include/index.html", ContentType: "text/html; charset=utf-8", - ContentEncoding: "", Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"), } node.SetMode(420) @@ -202,7 +190,6 @@ func generate_testdata_include_index_js() *memfs.Node { SysPath: "testdata/include/index.js", Path: "/include/index.js", ContentType: "text/javascript; charset=utf-8", - ContentEncoding: "", Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"), } node.SetMode(420) @@ -217,7 +204,6 @@ func generate_testdata_index_css() *memfs.Node { SysPath: "testdata/index.css", Path: "/index.css", ContentType: "text/css; charset=utf-8", - ContentEncoding: "", Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"), } node.SetMode(420) @@ -232,7 +218,6 @@ func generate_testdata_index_html() *memfs.Node { SysPath: "testdata/index.html", Path: "/index.html", ContentType: "text/html; charset=utf-8", - ContentEncoding: "", Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"), } node.SetMode(420) @@ -247,7 +232,6 @@ func generate_testdata_index_js() *memfs.Node { SysPath: "testdata/index.js", Path: "/index.js", ContentType: "text/javascript; charset=utf-8", - ContentEncoding: "", Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"), } node.SetMode(420) @@ -262,7 +246,6 @@ func generate_testdata_plain() *memfs.Node { SysPath: "testdata/plain", Path: "/plain", ContentType: "text/plain; charset=utf-8", - ContentEncoding: "", Content: []byte("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x70\x6C\x61\x69\x6E\x20\x74\x65\x78\x74\x2E\x0A"), } node.SetMode(420) diff --git a/lib/memfs/internal/test/embed_disable_modtime/embed_test.go b/lib/memfs/internal/test/embed_disable_modtime/embed_test.go index 30ea9192..42d177dd 100644 --- a/lib/memfs/internal/test/embed_disable_modtime/embed_test.go +++ b/lib/memfs/internal/test/embed_disable_modtime/embed_test.go @@ -11,7 +11,6 @@ func generate_testdata() *memfs.Node { SysPath: "testdata", Path: "/", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetName("/") @@ -31,7 +30,6 @@ func generate_testdata_direct() *memfs.Node { SysPath: "testdata/direct", Path: "/direct", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetName("direct") @@ -45,7 +43,6 @@ func generate_testdata_direct_add() *memfs.Node { SysPath: "testdata/direct/add", Path: "/direct/add", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetName("add") @@ -60,7 +57,6 @@ func generate_testdata_direct_add_file() *memfs.Node { SysPath: "testdata/direct/add/file", Path: "/direct/add/file", ContentType: "text/plain; charset=utf-8", - ContentEncoding: "", Content: []byte("\x54\x65\x73\x74\x20\x64\x69\x72\x65\x63\x74\x20\x61\x64\x64\x20\x66\x69\x6C\x65\x2E\x0A"), } node.SetMode(420) @@ -74,7 +70,6 @@ func generate_testdata_direct_add_file2() *memfs.Node { SysPath: "testdata/direct/add/file2", Path: "/direct/add/file2", ContentType: "text/plain; charset=utf-8", - ContentEncoding: "", Content: []byte("\x54\x65\x73\x74\x20\x64\x69\x72\x65\x63\x74\x20\x61\x64\x64\x20\x66\x69\x6C\x65\x20\x32\x2E\x0A"), } node.SetMode(420) @@ -88,7 +83,6 @@ func generate_testdata_exclude() *memfs.Node { SysPath: "testdata/exclude", Path: "/exclude", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetName("exclude") @@ -104,7 +98,6 @@ func generate_testdata_exclude_index_link_css() *memfs.Node { SysPath: "testdata/exclude/index-link.css", Path: "/exclude/index-link.css", ContentType: "text/css; charset=utf-8", - ContentEncoding: "", Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"), } node.SetMode(420) @@ -118,7 +111,6 @@ func generate_testdata_exclude_index_link_html() *memfs.Node { SysPath: "testdata/exclude/index-link.html", Path: "/exclude/index-link.html", ContentType: "text/html; charset=utf-8", - ContentEncoding: "", Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"), } node.SetMode(420) @@ -132,7 +124,6 @@ func generate_testdata_exclude_index_link_js() *memfs.Node { SysPath: "testdata/exclude/index-link.js", Path: "/exclude/index-link.js", ContentType: "text/javascript; charset=utf-8", - ContentEncoding: "", Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"), } node.SetMode(420) @@ -146,7 +137,6 @@ func generate_testdata_include() *memfs.Node { SysPath: "testdata/include", Path: "/include", ContentType: "", - ContentEncoding: "", } node.SetMode(2147484141) node.SetName("include") @@ -162,7 +152,6 @@ func generate_testdata_include_index_css() *memfs.Node { SysPath: "testdata/include/index.css", Path: "/include/index.css", ContentType: "text/css; charset=utf-8", - ContentEncoding: "", Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"), } node.SetMode(420) @@ -176,7 +165,6 @@ func generate_testdata_include_index_html() *memfs.Node { SysPath: "testdata/include/index.html", Path: "/include/index.html", ContentType: "text/html; charset=utf-8", - ContentEncoding: "", Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"), } node.SetMode(420) @@ -190,7 +178,6 @@ func generate_testdata_include_index_js() *memfs.Node { SysPath: "testdata/include/index.js", Path: "/include/index.js", ContentType: "text/javascript; charset=utf-8", - ContentEncoding: "", Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"), } node.SetMode(420) @@ -204,7 +191,6 @@ func generate_testdata_index_css() *memfs.Node { SysPath: "testdata/index.css", Path: "/index.css", ContentType: "text/css; charset=utf-8", - ContentEncoding: "", Content: []byte("\x62\x6F\x64\x79\x20\x7B\x0A\x7D\x0A"), } node.SetMode(420) @@ -218,7 +204,6 @@ func generate_testdata_index_html() *memfs.Node { SysPath: "testdata/index.html", Path: "/index.html", ContentType: "text/html; charset=utf-8", - ContentEncoding: "", Content: []byte("\x3C\x68\x74\x6D\x6C\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"), } node.SetMode(420) @@ -232,7 +217,6 @@ func generate_testdata_index_js() *memfs.Node { SysPath: "testdata/index.js", Path: "/index.js", ContentType: "text/javascript; charset=utf-8", - ContentEncoding: "", Content: []byte("\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x58\x28\x29\x20\x7B\x7D\x0A"), } node.SetMode(420) @@ -246,7 +230,6 @@ func generate_testdata_plain() *memfs.Node { SysPath: "testdata/plain", Path: "/plain", ContentType: "text/plain; charset=utf-8", - ContentEncoding: "", Content: []byte("\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x70\x6C\x61\x69\x6E\x20\x74\x65\x78\x74\x2E\x0A"), } node.SetMode(420) diff --git a/lib/memfs/memfs.go b/lib/memfs/memfs.go index fe924439..e1841dae 100644 --- a/lib/memfs/memfs.go +++ b/lib/memfs/memfs.go @@ -6,9 +6,7 @@ package memfs import ( "bytes" - "compress/gzip" "fmt" - "io" "log" "net/http" "os" @@ -24,12 +22,7 @@ import ( libstrings "github.com/shuLhan/share/lib/strings" ) -// -// List of valid content encoding for ContentEncode(). -// const ( - EncodingGzip = "gzip" - defContentType = "text/plain" // Default content type for empty file. ) @@ -231,64 +224,6 @@ func (mfs *MemFS) AddFile(internalPath, externalPath string) (node *Node, err er } // -// ContentEncode encode each node's content into specific encoding, in other -// words this method can be used to compress the content of file in memory -// or before being served or written. -// -// Only file with size greater than 0 will be encoded. -// -// List of known encoding is "gzip". -// -func (mfs *MemFS) ContentEncode(encoding string) (err error) { - var ( - logp = "ContentEncode" - buf bytes.Buffer - encoder io.WriteCloser - ) - - encoding = strings.ToLower(encoding) - - switch encoding { - case EncodingGzip: - encoder = gzip.NewWriter(&buf) - default: - return fmt.Errorf("%s: invalid encoding %q", logp, encoding) - } - - nodes := mfs.PathNodes.Nodes() - for _, node := range nodes { - if node.mode.IsDir() || len(node.Content) == 0 { - continue - } - - _, err = encoder.Write(node.Content) - if err != nil { - return fmt.Errorf("%s: %w", logp, err) - } - - err = encoder.Close() - if err != nil { - return fmt.Errorf("%s: %w", logp, err) - } - - node.Content = make([]byte, buf.Len()) - copy(node.Content, buf.Bytes()) - - node.ContentEncoding = encoding - node.size = int64(len(node.Content)) - - buf.Reset() - - if encoding == EncodingGzip { - gziper := encoder.(*gzip.Writer) - gziper.Reset(&buf) - } - } - - return nil -} - -// // Get the node representation of file in memory. If path is not exist it // will return os.ErrNotExist. // @@ -376,11 +311,6 @@ func (mfs *MemFS) Search(words []string, snippetLen int) (results []SearchResult snippetLen = 60 } - var ( - logp = "Search" - err error - ) - tokens := libstrings.ToBytes(words) for x := 0; x < len(tokens); x++ { tokens[x] = bytes.ToLower(tokens[x]) @@ -397,11 +327,7 @@ func (mfs *MemFS) Search(words []string, snippetLen int) (results []SearchResult } if len(node.lowerv) == 0 { - _, err = node.Decode() - if err != nil { - log.Printf("%s: %s", logp, err) - continue - } + node.plainv = node.Content if strings.HasPrefix(node.ContentType, "text/html") { node.plainv = sanitize.HTML(node.plainv) diff --git a/lib/memfs/node.go b/lib/memfs/node.go index f134f814..4311102d 100644 --- a/lib/memfs/node.go +++ b/lib/memfs/node.go @@ -6,7 +6,6 @@ package memfs import ( "bytes" - "compress/gzip" "encoding/base64" "errors" "fmt" @@ -35,14 +34,13 @@ type Node struct { os.FileInfo http.File - SysPath string // The original file path in system. - Path string // Absolute file path in memory. - Content []byte // Content of file. - ContentType string // File type per MIME, for example "application/json". - ContentEncoding string // File type encoding, for example "gzip". - Parent *Node // Pointer to parent directory. - Childs []*Node // List of files in directory. - GenFuncName string // The function name for embedded Go code. + SysPath string // The original file path in system. + Path string // Absolute file path in memory. + Content []byte // Content of file. + ContentType string // File type per MIME, for example "application/json". + Parent *Node // Pointer to parent directory. + Childs []*Node // List of files in directory. + GenFuncName string // The function name for embedded Go code. name string // File name. modTime time.Time // ModTime contains file modification time. @@ -145,77 +143,6 @@ func (node *Node) Close() error { return nil } -// -// Decode the contents of node (for example, uncompress with gzip) and return -// it. -// -func (node *Node) Decode() ([]byte, error) { - if len(node.ContentEncoding) == 0 { - node.plainv = node.Content - return node.plainv, nil - } - - logp := "Decode" - node.plainv = node.plainv[:0] - - if node.ContentEncoding == EncodingGzip { - r, err := gzip.NewReader(bytes.NewReader(node.Content)) - if err != nil { - return nil, fmt.Errorf("%s: %w", logp, err) - } - - buf := make([]byte, 1024) - for { - n, err := r.Read(buf) - if n > 0 { - node.plainv = append(node.plainv, buf[:n]...) - } - if err != nil { - if err == io.EOF { - break - } - return nil, fmt.Errorf("%s: %w", logp, err) - } - buf = buf[0:] - } - } - - return node.plainv, nil -} - -// -// Encode compress and set the content of Node. -// -func (node *Node) Encode(content []byte) (err error) { - logp := "Encode" - - node.plainv = content - node.lowerv = bytes.ToLower(content) - - switch node.ContentEncoding { - case EncodingGzip: - var buf bytes.Buffer - gz := gzip.NewWriter(&buf) - - _, err = gz.Write(content) - if err != nil { - _ = gz.Close() - return fmt.Errorf("%s: %w", logp, err) - } - - err = gz.Close() - if err != nil { - return fmt.Errorf("%s: %w", logp, err) - } - - node.Content = libbytes.Copy(buf.Bytes()) - - default: - node.Content = content - } - return nil -} - func (node *Node) IsDir() bool { return node.mode.IsDir() } @@ -319,11 +246,8 @@ func (node *Node) Save(content []byte) (err error) { if err != nil { return fmt.Errorf("%s: %w", logp, err) } - err = node.Encode(content) - if err != nil { - return fmt.Errorf("%s: %w", logp, err) - } + node.Content = content node.modTime = time.Now() node.size = int64(len(content)) return nil diff --git a/lib/memfs/node_test.go b/lib/memfs/node_test.go index 271bcbaa..0a625d03 100644 --- a/lib/memfs/node_test.go +++ b/lib/memfs/node_test.go @@ -148,24 +148,12 @@ func TestNode_Save(t *testing.T) { contentEncoding string expContent []byte }{{ - desc: "Without content encoding", + desc: "With non empty content", content: []byte("ABC"), expContent: []byte("ABC"), - }, { - desc: "With content encoding is gzip", - contentEncoding: EncodingGzip, - content: []byte("ABC"), - expContent: []byte{ - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0x72, 0x74, 0x72, 0x06, 0x04, 0x00, - 0x00, 0xff, 0xff, 0x48, 0x03, 0x83, 0xa3, 0x03, - 0x00, 0x00, 0x00, - }, }} for _, c := range cases { - node.ContentEncoding = c.contentEncoding - err = node.Save(c.content) if err != nil { t.Fatal(err) diff --git a/lib/memfs/template.go b/lib/memfs/template.go index 35bf8ac4..4751408e 100644 --- a/lib/memfs/template.go +++ b/lib/memfs/template.go @@ -55,7 +55,6 @@ func {{ .Node.GenFuncName}}() *memfs.Node { SysPath: "{{.Node.SysPath}}", Path: "{{.Node.Path}}", ContentType: "{{.Node.ContentType}}", - ContentEncoding: "{{.Node.ContentEncoding}}", {{- if .Node.Content }} Content: []byte("{{range $x, $c := .Node.Content}}{{ printf "\\x%02X" $c }}{{end}}"), {{- end }} |
