diff options
-rw-r--r-- | hugolib/site.go | 4 | ||||
-rw-r--r-- | transform/absurl.go | 32 | ||||
-rw-r--r-- | transform/chain_test.go | 8 |
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) } |