Add generic set type (#21408)

This PR adds a generic set type to get rid of maps used as sets.

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
KN4CK3R 2022-10-12 07:18:26 +02:00 committed by GitHub
parent e84558b093
commit 0e57ff7eee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
41 changed files with 328 additions and 324 deletions

View file

@ -11,6 +11,7 @@ import (
"path/filepath"
"strings"
"code.gitea.io/gitea/modules/container"
"code.gitea.io/gitea/modules/httpcache"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
@ -83,11 +84,11 @@ func AssetsHandlerFunc(opts *Options) http.HandlerFunc {
}
// parseAcceptEncoding parse Accept-Encoding: deflate, gzip;q=1.0, *;q=0.5 as compress methods
func parseAcceptEncoding(val string) map[string]bool {
func parseAcceptEncoding(val string) container.Set[string] {
parts := strings.Split(val, ";")
types := make(map[string]bool)
types := make(container.Set[string])
for _, v := range strings.Split(parts[0], ",") {
types[strings.TrimSpace(v)] = true
types.Add(strings.TrimSpace(v))
}
return types
}

View file

@ -7,28 +7,23 @@ package public
import (
"testing"
"code.gitea.io/gitea/modules/container"
"github.com/stretchr/testify/assert"
)
func TestParseAcceptEncoding(t *testing.T) {
kases := []struct {
Header string
Expected map[string]bool
Expected container.Set[string]
}{
{
Header: "deflate, gzip;q=1.0, *;q=0.5",
Expected: map[string]bool{
"deflate": true,
"gzip": true,
},
Header: "deflate, gzip;q=1.0, *;q=0.5",
Expected: container.SetOf("deflate", "gzip"),
},
{
Header: " gzip, deflate, br",
Expected: map[string]bool{
"deflate": true,
"gzip": true,
"br": true,
},
Header: " gzip, deflate, br",
Expected: container.SetOf("deflate", "gzip", "br"),
},
}

View file

@ -60,7 +60,7 @@ func AssetIsDir(name string) (bool, error) {
// serveContent serve http content
func serveContent(w http.ResponseWriter, req *http.Request, fi os.FileInfo, modtime time.Time, content io.ReadSeeker) {
encodings := parseAcceptEncoding(req.Header.Get("Accept-Encoding"))
if encodings["gzip"] {
if encodings.Contains("gzip") {
if cf, ok := fi.(*vfsgen۰CompressedFileInfo); ok {
rdGzip := bytes.NewReader(cf.GzipBytes())
// all static files are managed by Gitea, so we can make sure every file has the correct ext name