From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Sat, 15 Jul 2023 09:13:08 +0000 (+0200) Subject: Fix for data mounts in sub folders X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=286821e360e13b3a174854914c9cedd437bdd25e;p=brevno-suite%2Fhugo Fix for data mounts in sub folders Before this change, data files from Hugo modules were always mounted at the root of the `data` directory. The File and FileMetaInfo structs for modules are different from 'native' data directories. This changes how the keyParts for data files are generated so that data from modules or native directories are treated the same. --- diff --git a/hugolib/hugo_modules_test.go b/hugolib/hugo_modules_test.go index 3353f508e..88a0c3ec6 100644 --- a/hugolib/hugo_modules_test.go +++ b/hugolib/hugo_modules_test.go @@ -1178,3 +1178,32 @@ target = "content/resources-b" b.AssertFileContent("public/resources-a/subdir/about/index.html", "Single") b.AssertFileContent("public/resources-b/subdir/about/index.html", "Single") } + +func TestMountData(t *testing.T) { + files := ` +-- hugo.toml -- +baseURL = 'https://example.org/' +disableKinds = ["taxonomy", "term", "RSS", "sitemap", "robotsTXT", "page", "section"] + +[[module.mounts]] +source = "data" +target = "data" + +[[module.mounts]] +source = "extra-data" +target = "data/extra" +-- extra-data/test.yaml -- +message: Hugo Rocks +-- layouts/index.html -- +{{ site.Data.extra.test.message }} +` + + b := NewIntegrationTestBuilder( + IntegrationTestConfig{ + T: t, + TxtarString: files, + }, + ).Build() + + b.AssertFileContent("public/index.html", "Hugo Rocks") +} diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index de19a3669..3b5efa2e5 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -555,13 +555,14 @@ func (h *HugoSites) loadData(fis []hugofs.FileMetaInfo) (err error) { h.data = make(map[string]any) for _, fi := range fis { + basePath := fi.Meta().Path fileSystem := spec.NewFilesystemFromFileMetaInfo(fi) files, err := fileSystem.Files() if err != nil { return err } for _, r := range files { - if err := h.handleDataFile(r); err != nil { + if err := h.handleDataFile(basePath, r); err != nil { return err } } @@ -570,7 +571,7 @@ func (h *HugoSites) loadData(fis []hugofs.FileMetaInfo) (err error) { return } -func (h *HugoSites) handleDataFile(r source.File) error { +func (h *HugoSites) handleDataFile(basePath string, r source.File) error { var current map[string]any f, err := r.FileInfo().Meta().Open() @@ -581,7 +582,8 @@ func (h *HugoSites) handleDataFile(r source.File) error { // Crawl in data tree to insert data current = h.data - keyParts := strings.Split(r.Dir(), helpers.FilePathSeparator) + dataPath := filepath.Join(basePath, r.Dir()) + keyParts := strings.Split(dataPath, helpers.FilePathSeparator) for _, key := range keyParts { if key != "" {