]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Fix for data mounts in sub folders
authorDavid Karlsson <35727626+dvdksn@users.noreply.github.com>
Sat, 15 Jul 2023 09:13:08 +0000 (11:13 +0200)
committerGitHub <noreply@github.com>
Sat, 15 Jul 2023 09:13:08 +0000 (11:13 +0200)
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.

hugolib/hugo_modules_test.go
hugolib/hugo_sites.go

index 3353f508e5ff561659dc11c514c15b48aa528b58..88a0c3ec630ae222b489971125498a17158b5df8 100644 (file)
@@ -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")
+}
index de19a3669b16fbe841f606d42ef721051e728989..3b5efa2e559ac5c66e3acfce100e1335206f180a 100644 (file)
@@ -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 != "" {