]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Create hugo_stats.json if it's mounted but does not exists
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 19 Jul 2023 08:28:56 +0000 (10:28 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 19 Jul 2023 17:50:37 +0000 (19:50 +0200)
A common pattern for Tailwind 3 is to mount that file to get it on the server watch list.

A common pattern is also to add hugo_stats.json to .gitignore.

This has meant that the first time you start the server (no hugo_stats.json), it just doesn't work as expected.

Fixes #11264

hugofs/files/classifier.go
hugolib/hugo_sites_build.go
modules/collect.go
testscripts/unfinished/server__watch_hugo_stats.txt [new file with mode: 0644]

index 09b239c21a990ce48dbc75fff59a1d102692ff65..bdac2d68698f6681d0c5aa2f440e51e8dbad03d8 100644 (file)
@@ -31,6 +31,8 @@ const (
        FilenamePackageHugoJSON = "package.hugo.json"
        // The NPM package file.
        FilenamePackageJSON = "package.json"
+
+       FilenameHugoStatsJSON = "hugo_stats.json"
 )
 
 var (
index 0a861d32e666607372d68deecba31a933cf84b91..0c1ec050b04bf75ed6897f854e1d87526963381e 100644 (file)
@@ -23,6 +23,7 @@ import (
        "time"
 
        "github.com/bep/logg"
+       "github.com/gohugoio/hugo/hugofs/files"
        "github.com/gohugoio/hugo/langs"
        "github.com/gohugoio/hugo/publisher"
        "github.com/gohugoio/hugo/tpl"
@@ -491,14 +492,12 @@ func (h *HugoSites) writeBuildStats() error {
                HTMLElements: *htmlElements,
        }
 
-       const hugoStatsName = "hugo_stats.json"
-
        js, err := json.MarshalIndent(stats, "", "  ")
        if err != nil {
                return err
        }
 
-       filename := filepath.Join(h.Configs.LoadingInfo.BaseConfig.WorkingDir, hugoStatsName)
+       filename := filepath.Join(h.Configs.LoadingInfo.BaseConfig.WorkingDir, files.FilenameHugoStatsJSON)
 
        if existingContent, err := afero.ReadFile(hugofs.Os, filename); err == nil {
                // Check if the content has changed.
index 0c578b5dba9da1fd2c7dd3c3b274f8b47fd4e6f1..e47563ab778e85427efa9d29f839c4c3cd5e3725 100644 (file)
@@ -664,7 +664,21 @@ func (c *collector) normalizeMounts(owner *moduleAdapter, mounts []Mount) ([]Mou
                // Verify that Source exists
                _, err := c.fs.Stat(sourceDir)
                if err != nil {
-                       continue
+                       if strings.HasSuffix(sourceDir, files.FilenameHugoStatsJSON) {
+                               // A common pattern for Tailwind 3 is to mount that file to get it on the server watch list.
+
+                               // A common pattern is also to add hugo_stats.json to .gitignore.
+
+                               // Create an empty file.
+                               f, err := c.fs.Create(sourceDir)
+                               if err != nil {
+                                       return nil, fmt.Errorf("%s: %q", errMsg, err)
+                               }
+                               f.Close()
+                       } else {
+                               continue
+                       }
+
                }
 
                // Verify that target points to one of the predefined component dirs
diff --git a/testscripts/unfinished/server__watch_hugo_stats.txt b/testscripts/unfinished/server__watch_hugo_stats.txt
new file mode 100644 (file)
index 0000000..179e59f
--- /dev/null
@@ -0,0 +1,18 @@
+hugo server  &
+
+waitServer
+stopServer
+! stderr .
+
+exists hugo_stats.json
+
+-- hugo.toml --
+title = "Hugo Server Test"
+baseURL = "https://example.org/"
+disableKinds = ["taxonomy", "term", "sitemap"]
+[module]
+[[module.mounts]]
+source = "hugo_stats.json"
+target = "assets/watching/hugo_stats.json"
+-- layouts/index.html --
+<body>Home</body>