shithub: hugo

Download patch

ref: 9cdd2e54c2a1b724fcba8257956c3981ea0017df
parent: 603b24a16344b1da485043e8a60b0505ad18cee6
author: Austin Ziegler <[email protected]>
date: Wed Oct 1 10:26:43 EDT 2014

Use md5 against the file path for uniqueness.

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -15,6 +15,8 @@
 
 import (
 	"bytes"
+	"crypto/md5"
+	"encoding/hex"
 	"errors"
 	"fmt"
 	"html/template"
@@ -62,7 +64,7 @@
 }
 
 type File struct {
-	Name, FileName, Extension, Dir string
+	Name, FileName, Extension, Dir, UniqueId string
 }
 
 type PageMeta struct {
@@ -94,6 +96,10 @@
 	return true
 }
 
+func (p *Page) UniqueId() string {
+	return p.File.UniqueId
+}
+
 func (p *Page) setSummary() {
 	if bytes.Contains(p.rawContent, summaryDivider) {
 		// If user defines split:
@@ -119,11 +125,11 @@
 }
 
 func (p *Page) renderBytes(content []byte) []byte {
-	return renderBytes(content, p.guessMarkupType(), p.File.Name)
+	return renderBytes(content, p.guessMarkupType(), p.UniqueId())
 }
 
 func (p *Page) renderContent(content []byte) []byte {
-	return renderBytesWithTOC(content, p.guessMarkupType(), p.File.Name)
+	return renderBytesWithTOC(content, p.guessMarkupType(), p.UniqueId())
 }
 
 func renderBytesWithTOC(content []byte, pagefmt string, footnoteref string) []byte {
@@ -154,7 +160,7 @@
 	name = name[:len(name)-len(filepath.Ext(name))]
 
 	page := Page{contentType: "",
-		File:   File{Name: name, FileName: filename, Extension: "html"},
+		File:   File{Name: name, FileName: filename, Extension: "html", UniqueId: md5ForFilename(filename)},
 		Node:   Node{Keywords: []string{}, Sitemap: Sitemap{Priority: -1}},
 		Params: make(map[string]interface{})}
 
@@ -803,4 +809,10 @@
 	}
 
 	return l
+}
+
+func md5ForFilename(f string) string {
+	h := md5.New()
+	h.Write([]byte(f))
+	return hex.EncodeToString(h.Sum([]byte{}))
 }
--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -93,7 +93,7 @@
 			var data = &ShortcodeWithPage{Params: params, Page: p}
 			if endStart > 0 {
 				s := stringToParse[leadEnd+3 : leadEnd+endStart]
-				data.Inner = template.HTML(renderBytes([]byte(CleanP(ShortcodesHandle(s, p, t))), p.guessMarkupType(), p.File.Name))
+				data.Inner = template.HTML(renderBytes([]byte(CleanP(ShortcodesHandle(s, p, t))), p.guessMarkupType(), p.UniqueId()))
 				remainder := CleanP(stringToParse[leadEnd+endEnd:])
 
 				return CleanP(stringToParse[:leadStart]) +