diff --git a/hugolib/site.go b/hugolib/site.go index b663a39f0..47c2af453 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -416,6 +416,9 @@ func (s *SiteInfo) refLink(ref string, page *Page, relative bool, outputFormat s var refURL *url.URL var err error + ref = filepath.ToSlash(ref) + ref = strings.TrimPrefix(ref, "/") + refURL, err = url.Parse(ref) if err != nil { diff --git a/hugolib/site_test.go b/hugolib/site_test.go index ff8fdf48b..6bcfaa441 100644 --- a/hugolib/site_test.go +++ b/hugolib/site_test.go @@ -232,6 +232,8 @@ func doTestCrossrefs(t *testing.T, relative, uglyURLs bool) { expectedPathSuffix = "/index.html" } + doc3Slashed := filepath.FromSlash("/sect/doc3.md") + sources := []source.ByteSource{ { Name: filepath.FromSlash("sect/doc1.md"), @@ -251,6 +253,11 @@ THE END.`, refShortcode)), Name: filepath.FromSlash("sect/doc3.md"), Content: []byte(fmt.Sprintf(`**Ref 1:**{{< %s "sect/doc3.md" >}}.`, refShortcode)), }, + // Issue #3703 + { + Name: filepath.FromSlash("sect/doc4.md"), + Content: []byte(fmt.Sprintf(`**Ref 1:**{{< %s "%s" >}}.`, refShortcode, doc3Slashed)), + }, } cfg, fs := newTestCfg() @@ -271,9 +278,7 @@ THE END.`, refShortcode)), WithTemplate: createWithTemplateFromNameValues("_default/single.html", "{{.Content}}")}, BuildCfg{}) - if len(s.RegularPages) != 3 { - t.Fatalf("Expected 3 got %d pages", len(s.AllPages)) - } + require.Len(t, s.RegularPages, 4) th := testHelper{s.Cfg, s.Fs, t} @@ -284,6 +289,7 @@ THE END.`, refShortcode)), {filepath.FromSlash(fmt.Sprintf("public/sect/doc1%s", expectedPathSuffix)), fmt.Sprintf("

Ref 2: %s/sect/doc2%s

\n", expectedBase, expectedURLSuffix)}, {filepath.FromSlash(fmt.Sprintf("public/sect/doc2%s", expectedPathSuffix)), fmt.Sprintf("

Ref 1:

\n\n%s/sect/doc1%s\n\n

THE END.

\n", expectedBase, expectedURLSuffix)}, {filepath.FromSlash(fmt.Sprintf("public/sect/doc3%s", expectedPathSuffix)), fmt.Sprintf("

Ref 1:%s/sect/doc3%s.

\n", expectedBase, expectedURLSuffix)}, + {filepath.FromSlash(fmt.Sprintf("public/sect/doc4%s", expectedPathSuffix)), fmt.Sprintf("

Ref 1:%s/sect/doc3%s.

\n", expectedBase, expectedURLSuffix)}, } for _, test := range tests {