From 75e0e2c32406870e2ce2837255c4cca60e611861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 26 Jan 2022 17:48:50 +0100 Subject: [PATCH] Fix duplicate mount sources Fixes #9426 --- hugofs/walk.go | 3 ++- hugolib/hugo_modules_test.go | 36 ++++++++++++++++++++++++++++++++++++ hugolib/pages_capture.go | 1 - 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/hugofs/walk.go b/hugofs/walk.go index 44d58f06085..9e81635efec 100644 --- a/hugofs/walk.go +++ b/hugofs/walk.go @@ -196,6 +196,7 @@ func (w *Walkway) walk(path string, info FileMetaInfo, dirEntries []FileMetaInfo } fis, err := f.Readdir(-1) + f.Close() if err != nil { if w.checkErr(filename, err) { @@ -270,7 +271,7 @@ func (w *Walkway) walk(path string, info FileMetaInfo, dirEntries []FileMetaInfo meta.Path = normalizeFilename(pathMeta) meta.PathWalk = pathn - if fim.IsDir() && w.isSeen(meta.Filename) { + if fim.IsDir() && meta.IsSymlink && w.isSeen(meta.Filename) { // Prevent infinite recursion // Possible cyclic reference meta.SkipDir = true diff --git a/hugolib/hugo_modules_test.go b/hugolib/hugo_modules_test.go index 46423043750..eb6b7433b5e 100644 --- a/hugolib/hugo_modules_test.go +++ b/hugolib/hugo_modules_test.go @@ -1134,3 +1134,39 @@ P1: {{ $p1.Title }}|{{ $p1.RelPermalink }}|Filename: {{ $p1.File.Filename }} b.AssertFileContent("public/index.html", "P1: Abs|/p1/", "Filename: "+contentFilename) } + +// Issue 9426 +func TestMountSameSource(t *testing.T) { + config := `baseURL = 'https://example.org/' +languageCode = 'en-us' +title = 'Hugo GitHub Issue #9426' + +disableKinds = ['RSS','sitemap','taxonomy','term'] + +[[module.mounts]] +source = "content" +target = "content" + +[[module.mounts]] +source = "extra-content" +target = "content/resources-a" + +[[module.mounts]] +source = "extra-content" +target = "content/resources-b" +` + b := newTestSitesBuilder(t).WithConfigFile("toml", config) + + b.WithContent("p1.md", "") + + b.WithSourceFile( + "extra-content/_index.md", "", + "extra-content/subdir/_index.md", "", + "extra-content/subdir/about.md", "", + ) + + b.Build(BuildCfg{}) + + b.AssertFileContent("public/resources-a/subdir/about/index.html", "Single") + b.AssertFileContent("public/resources-b/subdir/about/index.html", "Single") +} diff --git a/hugolib/pages_capture.go b/hugolib/pages_capture.go index da7515fc22b..5809d4cae89 100644 --- a/hugolib/pages_capture.go +++ b/hugolib/pages_capture.go @@ -393,7 +393,6 @@ func (c *pagesCollector) collectDir(dirname string, partial bool, inFilter func( seen := make(map[string]bool) for i, fi := range readdir { - if fi.IsDir() { continue }