summaryrefslogtreecommitdiffstats
path: root/hugofs/glob/glob.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-09-23 13:54:09 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-09-23 16:19:21 +0200
commit5c41653364d7be01293819b08b0d3d7799d910f5 (patch)
treeffd8db1da07df327a0f0d4f8d0356891c5b7d405 /hugofs/glob/glob.go
parent281554ee97eb243af097611aaf6bfec8940ad6d1 (diff)
Consolidate the glob case logic
Looking at the code as a whole, we ended up with a little to much "buttons". It turns out that doing case insensitive matching (lower both pattern and strings to match) performs just fine. Or at least, it gives the penalty to the people who uses mixed case filenames. ``` GetGlob/Default_cache-10 10.6ns ± 2% 10.6ns ± 1% ~ (p=0.657 n=4+4) GetGlob/Filenames_cache,_lowercase_searchs-10 10.6ns ± 2% 10.6ns ± 0% ~ (p=1.000 n=4+4) GetGlob/Filenames_cache,_mixed_case_searchs-10 29.7ns ± 1% 29.6ns ± 1% ~ (p=0.886 n=4+4) GetGlob/GetGlob-10 13.7ns ± 1% 13.7ns ± 0% ~ (p=0.429 n=4+4) name old alloc/op new alloc/op delta GetGlob/Default_cache-10 0.00B 0.00B ~ (all equal) GetGlob/Filenames_cache,_lowercase_searchs-10 0.00B 0.00B ~ (all equal) GetGlob/Filenames_cache,_mixed_case_searchs-10 5.00B ± 0% 5.00B ± 0% ~ (all equal) GetGlob/GetGlob-10 0.00B 0.00B ~ (all equal) name old allocs/op new allocs/op delta GetGlob/Default_cache-10 0.00 0.00 ~ (all equal) GetGlob/Filenames_cache,_lowercase_searchs-10 0.00 0.00 ~ (all equal) GetGlob/Filenames_cache,_mixed_case_searchs-10 1.00 ± 0% 1.00 ± 0% ~ (all equal) GetGlob/GetGlob-10 ```
Diffstat (limited to 'hugofs/glob/glob.go')
-rw-r--r--hugofs/glob/glob.go42
1 files changed, 4 insertions, 38 deletions
diff --git a/hugofs/glob/glob.go b/hugofs/glob/glob.go
index 87619802e..841824bcc 100644
--- a/hugofs/glob/glob.go
+++ b/hugofs/glob/glob.go
@@ -33,11 +33,6 @@ var (
isWindows: isWindows,
cache: make(map[string]globErr),
}
-
- filenamesGlobCache = &globCache{
- isWindows: isWindows,
- cache: make(map[string]globErr),
- }
)
type globErr struct {
@@ -86,10 +81,6 @@ func (gc *globCache) GetGlob(pattern string) (glob.Glob, error) {
}
type globDecorator struct {
- // Whether both pattern and the strings to match will be matched
- // by their original case.
- isCaseSensitive bool
-
// On Windows we may get filenames with Windows slashes to match,
// which wee need to normalize.
isWindows bool
@@ -101,14 +92,12 @@ func (g globDecorator) Match(s string) bool {
if g.isWindows {
s = filepath.ToSlash(s)
}
- if !g.isCaseSensitive {
- s = strings.ToLower(s)
- }
+ s = strings.ToLower(s)
return g.g.Match(s)
}
type globDecoratorDouble struct {
- lowerCase glob.Glob
+ lowerCase glob.Glob
originalCase glob.Glob
}
@@ -120,34 +109,11 @@ func GetGlob(pattern string) (glob.Glob, error) {
return defaultGlobCache.GetGlob(pattern)
}
-func GetFilenamesGlob(pattern string) (glob.Glob, error) {
- lowered := strings.ToLower(pattern)
- hasUpperCase := pattern != lowered
- gLowered, err := filenamesGlobCache.GetGlob(lowered)
- if err != nil {
- return nil, err
- }
-
- if !hasUpperCase {
- return gLowered, nil
- }
-
- gSensitive, err := filenamesGlobCache.GetGlob(pattern)
- if err != nil {
- return nil, err
- }
- return globDecoratorDouble{
- lowerCase: gLowered,
- originalCase: gSensitive,
- }, nil
-
-}
-
func NormalizePath(p string) string {
- return strings.Trim(path.Clean(filepath.ToSlash(strings.ToLower(p))), "/.")
+ return strings.ToLower(NormalizePathNoLower(p))
}
-func NormalizePathCaseSensitive(p string) string {
+func NormalizePathNoLower(p string) string {
return strings.Trim(path.Clean(filepath.ToSlash(p)), "/.")
}