summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hugolib/site.go4
-rw-r--r--transform/absurl.go32
-rw-r--r--transform/chain_test.go8
3 files changed, 29 insertions, 15 deletions
diff --git a/hugolib/site.go b/hugolib/site.go
index e1f0fe991..e05054847 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1363,7 +1363,7 @@ func (s *Site) renderAndWriteXML(name string, dest string, d interface{}, layout
err := s.render(name, d, renderBuffer, layouts...)
- absURLInXML, err := transform.AbsURLInXML(viper.GetString("BaseURL"))
+ absURLInXML, err := transform.AbsURLInXML()
if err != nil {
return err
}
@@ -1393,7 +1393,7 @@ func (s *Site) renderAndWritePage(name string, dest string, d interface{}, layou
transformLinks := transform.NewEmptyTransforms()
if viper.GetBool("CanonifyURLs") {
- absURL, err := transform.AbsURL(viper.GetString("BaseURL"))
+ absURL, err := transform.AbsURL()
if err != nil {
return err
}
diff --git a/transform/absurl.go b/transform/absurl.go
index b4bd1dff4..1c721071d 100644
--- a/transform/absurl.go
+++ b/transform/absurl.go
@@ -1,33 +1,47 @@
package transform
import (
+ "github.com/spf13/viper"
"sync"
)
var absURLInit sync.Once
var ar *absURLReplacer
-// for performance reasons, we reuse the first baseURL given
-func initAbsURLReplacer(baseURL string) {
- absURLInit.Do(func() {
- ar = newAbsURLReplacer(baseURL)
- })
+func AbsURL() (trs []link, err error) {
+ initAbsURLReplacer()
+ return absURLFromReplacer(ar)
}
-func AbsURL(absURL string) (trs []link, err error) {
- initAbsURLReplacer(absURL)
+func absURLFromURL(URL string) (trs []link, err error) {
+ return absURLFromReplacer(newAbsURLReplacer(URL))
+}
+func absURLFromReplacer(ar *absURLReplacer) (trs []link, err error) {
trs = append(trs, func(rw contentRewriter) {
ar.replaceInHTML(rw)
})
return
}
-func AbsURLInXML(absURL string) (trs []link, err error) {
- initAbsURLReplacer(absURL)
+func AbsURLInXML() (trs []link, err error) {
+ initAbsURLReplacer()
+ return absURLInXMLFromReplacer(ar)
+}
+
+func absURLInXMLFromURL(URL string) (trs []link, err error) {
+ return absURLInXMLFromReplacer(newAbsURLReplacer(URL))
+}
+func absURLInXMLFromReplacer(ar *absURLReplacer) (trs []link, err error) {
trs = append(trs, func(rw contentRewriter) {
ar.replaceInXML(rw)
})
return
}
+
+func initAbsURLReplacer() {
+ absURLInit.Do(func() {
+ ar = newAbsURLReplacer(viper.GetString("BaseURL"))
+ })
+}
diff --git a/transform/chain_test.go b/transform/chain_test.go
index d8ceb8bca..c69b2eb82 100644
--- a/transform/chain_test.go
+++ b/transform/chain_test.go
@@ -85,7 +85,7 @@ func TestChaingMultipleTransformers(t *testing.T) {
}
func BenchmarkAbsURL(b *testing.B) {
- absURL, _ := AbsURL("http://base")
+ absURL, _ := absURLFromURL("http://base")
tr := NewChain(absURL...)
b.ResetTimer()
@@ -95,7 +95,7 @@ func BenchmarkAbsURL(b *testing.B) {
}
func TestAbsURL(t *testing.T) {
- absURL, _ := AbsURL("http://base")
+ absURL, _ := absURLFromURL("http://base")
tr := NewChain(absURL...)
apply(t.Errorf, tr, abs_url_tests)
@@ -103,7 +103,7 @@ func TestAbsURL(t *testing.T) {
}
func BenchmarkXMLAbsURL(b *testing.B) {
- absURLInXML, _ := AbsURLInXML("http://base")
+ absURLInXML, _ := absURLInXMLFromURL("http://base")
tr := NewChain(absURLInXML...)
b.ResetTimer()
@@ -113,7 +113,7 @@ func BenchmarkXMLAbsURL(b *testing.B) {
}
func TestXMLAbsURL(t *testing.T) {
- absURLInXML, _ := AbsURLInXML("http://base")
+ absURLInXML, _ := absURLInXMLFromURL("http://base")
tr := NewChain(absURLInXML...)
apply(t.Errorf, tr, xml_abs_url_tests)
}