hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit aebfe156fb2f27057e61b2e50c7576e6b06dab58
parent 907d9e92682ed56a57a2206ae9bd9a985b3e1870
Author: ivan-meridianbanc-com <ivan@meridianbanc.com>
Date:   Wed,  2 Dec 2020 13:47:01 +0200

Fix RelURL and AbsURL when path starts with language


Diffstat:
Mhelpers/url.go | 16++++++++++++----
Mhelpers/url_test.go | 31+++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+), 4 deletions(-)
diff --git a/helpers/url.go b/helpers/url.go
@@ -181,10 +181,14 @@ func (p *PathSpec) AbsURL(in string, addLanguage bool) string {
 		if prefix != "" {
 			hasPrefix := false
 			// avoid adding language prefix if already present
+			in2 := in
 			if strings.HasPrefix(in, "/") {
-				hasPrefix = strings.HasPrefix(in[1:], prefix)
+				in2 = in[1:]
+			}
+			if in2 == prefix {
+				hasPrefix = true
 			} else {
-				hasPrefix = strings.HasPrefix(in, prefix)
+				hasPrefix = strings.HasPrefix(in2, prefix+"/")
 			}
 
 			if !hasPrefix {
@@ -230,10 +234,14 @@ func (p *PathSpec) RelURL(in string, addLanguage bool) string {
 		if prefix != "" {
 			hasPrefix := false
 			// avoid adding language prefix if already present
+			in2 := in
 			if strings.HasPrefix(in, "/") {
-				hasPrefix = strings.HasPrefix(in[1:], prefix)
+				in2 = in[1:]
+			}
+			if in2 == prefix {
+				hasPrefix = true
 			} else {
-				hasPrefix = strings.HasPrefix(in, prefix)
+				hasPrefix = strings.HasPrefix(in2, prefix+"/")
 			}
 
 			if !hasPrefix {
diff --git a/helpers/url_test.go b/helpers/url_test.go
@@ -84,6 +84,21 @@ func doTestAbsURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool,
 		{"http//foo", "http://base/path", "http://base/path/MULTIhttp/foo"},
 	}
 
+	if multilingual && addLanguage && defaultInSubDir {
+		newTests := []struct {
+			input    string
+			baseURL  string
+			expected string
+		}{
+			{lang + "test", "http://base/", "http://base/" + lang + "/" + lang + "test"},
+			{"/" + lang + "test", "http://base/", "http://base/" + lang + "/" + lang + "test"},
+		}
+
+		for _, test := range newTests {
+			tests = append(tests, test)
+		}
+	}
+
 	for _, test := range tests {
 		v.Set("baseURL", test.baseURL)
 		v.Set("contentDir", "content")
@@ -164,6 +179,22 @@ func doTestRelURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool,
 		{"//schemaless", "http://base/", false, "//schemaless"},
 	}
 
+	if multilingual && addLanguage && defaultInSubDir {
+		newTests := []struct {
+			input    string
+			baseURL  string
+			canonify bool
+			expected string
+		}{
+			{lang + "test", "http://base/", false, "/" + lang + "/" + lang + "test"},
+			{"/" + lang + "test", "http://base/", false, "/" + lang + "/" + lang + "test"},
+		}
+
+		for _, test := range newTests {
+			tests = append(tests, test)
+		}
+	}
+
 	for i, test := range tests {
 		v.Set("baseURL", test.baseURL)
 		v.Set("canonifyURLs", test.canonify)