ref: e1340c060bc52c95116bf0d5105a6c0d44bb67e6
parent: a0447345418e735a4b0fd401c1610950f66ed778
author: bep <bjorn.erik.pedersen@gmail.com>
date: Tue Mar 17 11:38:48 EDT 2015
Fix crossrefs on Windows Have to convert path slashes to file path slashes before the URL path is compared to a file path. Fixes #957
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -172,7 +172,8 @@
if refURL.Path != "" { for _, page := range []*Page(*s.Pages) {- if page.Source.Path() == refURL.Path || page.Source.LogicalName() == refURL.Path {+ refPath := filepath.FromSlash(refURL.Path)
+ if page.Source.Path() == refPath || page.Source.LogicalName() == refPath {target = page
break
}
--- a/hugolib/site_test.go
+++ b/hugolib/site_test.go
@@ -307,6 +307,83 @@
viper.Set("BuildFuture", false)}
+// Issue #957
+func TestCrossrefs(t *testing.T) {+ for _, uglyUrls := range []bool{true, false} {+ for _, relative := range []bool{true, false} {+ doTestCrossrefs(t, relative, uglyUrls)
+ }
+ }
+}
+
+func doTestCrossrefs(t *testing.T, relative, uglyUrls bool) {+ baseUrl := "http://foo/bar"
+ viper.Set("baseurl", baseUrl)+ viper.Set("UglyURLs", uglyUrls)+ viper.Set("verbose", true)+
+ var refShortcode string
+ var expectedBase string
+ var expectedUrlSuffix string
+ var expectedPathSuffix string
+
+ if relative {+ refShortcode = "relref"
+ expectedBase = "/bar"
+ } else {+ refShortcode = "ref"
+ expectedBase = baseUrl
+ }
+
+ if uglyUrls {+ expectedUrlSuffix = ".html"
+ expectedPathSuffix = ".html"
+ } else {+ expectedUrlSuffix = "/"
+ expectedPathSuffix = "/index.html"
+ }
+
+ sources := []source.ByteSource{+ {filepath.FromSlash("sect/doc1.md"),+ []byte(fmt.Sprintf(`Ref 2: {{< %s "sect/doc2.md" >}}`, refShortcode))},+ {filepath.FromSlash("sect/doc2.md"),+ []byte(fmt.Sprintf(`Ref 1: {{< %s "sect/doc1.md" >}}`, refShortcode))},+ }
+
+ s := &Site{+ Source: &source.InMemorySource{ByteSource: sources},+ Targets: targetList{Page: &target.PagePub{UglyURLs: uglyUrls}},+ }
+
+ s.initializeSiteInfo()
+ templatePrep(s)
+
+ must(s.addTemplate("_default/single.html", "{{.Content}}"))+
+ createAndRenderPages(t, s)
+
+ tests := []struct {+ doc string
+ expected string
+ }{+ {filepath.FromSlash(fmt.Sprintf("sect/doc1%s", expectedPathSuffix)), fmt.Sprintf("<p>Ref 2: %s/sect/doc2%s</p>\n", expectedBase, expectedUrlSuffix)},+ {filepath.FromSlash(fmt.Sprintf("sect/doc2%s", expectedPathSuffix)), fmt.Sprintf("<p>Ref 1: %s/sect/doc1%s</p>\n", expectedBase, expectedUrlSuffix)},+ }
+
+ for _, test := range tests {+ file, err := hugofs.DestinationFS.Open(test.doc)
+ if err != nil {+ t.Fatalf("Did not find %s in target: %s", test.doc, err)+ }
+ content := helpers.ReaderToBytes(file)
+
+ if !bytes.Equal(content, []byte(test.expected)) {+ t.Errorf("%s content expected:\n%q\ngot:\n%q", test.doc, test.expected, string(content))+ }
+ }
+
+}
+
// Issue #939
func Test404ShouldAlwaysHaveUglyUrls(t *testing.T) { for _, uglyURLs := range []bool{true, false} {--
⑨