shithub: hugo

Download patch

ref: 4b04db0f0855a1f54895d6c93c52dcea4b1ce3ca
parent: 97c1866e322284dec46db6f3d235807507f5b69f
author: Bjørn Erik Pedersen <[email protected]>
date: Sun Jan 7 06:29:02 EST 2018

resource: Avoid processing and storing same image for each language

Fixes #4231

--- a/resource/image.go
+++ b/resource/image.go
@@ -219,7 +219,7 @@
 		}
 
 		if conf.Rotate != 0 {
-			// Rotate it befor any scaling to get the dimensions correct.
+			// Rotate it before any scaling to get the dimensions correct.
 			src = imaging.Rotate(src, float64(conf.Rotate), color.Transparent)
 		}
 
--- a/resource/image_cache.go
+++ b/resource/image_cache.go
@@ -51,6 +51,15 @@
 
 func (c *imageCache) getOrCreate(
 	spec *Spec, key string, create func(resourceCacheFilename string) (*Image, error)) (*Image, error) {
+
+	relTargetFilename := key
+
+	if c.pathSpec.Language != nil {
+		// Avoid do and store more work than needed. The language versions will in
+		// most cases be duplicates of the same image files.
+		key = strings.TrimPrefix(key, "/"+c.pathSpec.Language.Lang)
+	}
+
 	// First check the in-memory store, then the disk.
 	c.mu.RLock()
 	img, found := c.store[key]
@@ -68,7 +77,7 @@
 	//  but the count of processed image variations for this site.
 	c.pathSpec.ProcessingStats.Incr(&c.pathSpec.ProcessingStats.ProcessedImages)
 
-	r, err := spec.NewResourceFromFilename(nil, c.absPublishDir, cacheFilename, key)
+	r, err := spec.NewResourceFromFilename(nil, c.absPublishDir, cacheFilename, relTargetFilename)
 	notFound := err != nil && os.IsNotExist(err)
 	if err != nil && !os.IsNotExist(err) {
 		return nil, err