shithub: hugo

Download patch

ref: e8ca8602c003862fe3da87306c2b2c27918b29cc
parent: beaf5db3ff7d70d5644f3d3aaab3d38284c5fede
author: Ruben Vermeersch <[email protected]>
date: Sun Mar 29 08:55:46 EDT 2015

Hash all pygments parameters.

Ensures that Hugo rehighlights source code whenever one of the
highlighting options changes.

--- a/helpers/pygments.go
+++ b/helpers/pygments.go
@@ -17,6 +17,7 @@
 	"bytes"
 	"crypto/sha1"
 	"fmt"
+	"io"
 	"io/ioutil"
 	"os/exec"
 	"strings"
@@ -47,9 +48,21 @@
 
 	fs := hugofs.OsFs
 
+	style := viper.GetString("PygmentsStyle")
+
+	noclasses := "true"
+	if viper.GetBool("PygmentsUseClasses") {
+		noclasses = "false"
+	}
+
 	// Try to read from cache first
-	hash := sha1.Sum([]byte(code))
-	cachefile := fmt.Sprintf("%s/pygments-%s-%x", viper.GetString("CacheDir"), lexer, hash)
+	hash := sha1.New()
+	io.WriteString(hash, lexer)
+	io.WriteString(hash, code)
+	io.WriteString(hash, style)
+	io.WriteString(hash, noclasses)
+
+	cachefile := fmt.Sprintf("%s/pygments-%x", viper.GetString("CacheDir"), hash.Sum(nil))
 	exists, err := Exists(cachefile, fs)
 	if err != nil {
 		jww.ERROR.Print(err.Error())
@@ -74,12 +87,6 @@
 	// No cache file, render and cache it
 	var out bytes.Buffer
 	var stderr bytes.Buffer
-	style := viper.GetString("PygmentsStyle")
-
-	noclasses := "true"
-	if viper.GetBool("PygmentsUseClasses") {
-		noclasses = "false"
-	}
 
 	cmd := exec.Command(pygmentsBin, "-l"+lexer, "-fhtml", "-O",
 		fmt.Sprintf("style=%s,noclasses=%s,encoding=utf8", style, noclasses))