hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 786f72302f65580ca8d1df2132a7756584539ea0
parent 0cae1cf8286b128295057d076c479c929f0febb3
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Sun, 29 Jul 2018 14:26:45 +0200

Fix image cache eviction for sites with subdir in baseURL

Fixes #5006

Diffstat:
Mhugolib/page_collections.go | 2+-
Mresource/image_cache.go | 13++++++++++++-
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/hugolib/page_collections.go b/hugolib/page_collections.go
@@ -322,7 +322,7 @@ func (c *PageCollections) clearResourceCacheForPage(page *Page) {
 		first := page.Resources[0]
 		dir := path.Dir(first.RelPermalink())
 		dir = strings.TrimPrefix(dir, page.LanguagePrefix())
-		// This is done to keep the memory usage in check when doing live reloads.
+		dir = strings.TrimPrefix(dir, page.s.BaseURL.Path())
 		page.s.ResourceSpec.DeleteCacheByPrefix(dir)
 	}
 }
diff --git a/resource/image_cache.go b/resource/image_cache.go
@@ -33,7 +33,7 @@ type imageCache struct {
 
 func (c *imageCache) isInCache(key string) bool {
 	c.mu.RLock()
-	_, found := c.store[key]
+	_, found := c.store[c.normalizeKey(key)]
 	c.mu.RUnlock()
 	return found
 }
@@ -41,6 +41,7 @@ func (c *imageCache) isInCache(key string) bool {
 func (c *imageCache) deleteByPrefix(prefix string) {
 	c.mu.Lock()
 	defer c.mu.Unlock()
+	prefix = c.normalizeKey(prefix)
 	for k := range c.store {
 		if strings.HasPrefix(k, prefix) {
 			delete(c.store, k)
@@ -48,6 +49,16 @@ func (c *imageCache) deleteByPrefix(prefix string) {
 	}
 }
 
+func (c *imageCache) normalizeKey(key string) string {
+	// It is a path with Unix style slashes and it always starts with a leading slash.
+	key = filepath.ToSlash(key)
+	if !strings.HasPrefix(key, "/") {
+		key = "/" + key
+	}
+
+	return key
+}
+
 func (c *imageCache) clear() {
 	c.mu.Lock()
 	defer c.mu.Unlock()