Skip to content

Commit

Permalink
Create hugo_stats.json if it's mounted but does not exists
Browse files Browse the repository at this point in the history
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
  • Loading branch information
bep committed Jul 19, 2023
1 parent f1a061e commit 7ae62f4
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 4 deletions.
2 changes: 2 additions & 0 deletions hugofs/files/classifier.go
Expand Up @@ -31,6 +31,8 @@ const (
FilenamePackageHugoJSON = "package.hugo.json"
// The NPM package file.
FilenamePackageJSON = "package.json"

FilenameHugoStatsJSON = "hugo_stats.json"
)

var (
Expand Down
5 changes: 2 additions & 3 deletions hugolib/hugo_sites_build.go
Expand Up @@ -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"
Expand Down Expand Up @@ -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.
Expand Down
16 changes: 15 additions & 1 deletion modules/collect.go
Expand Up @@ -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
Expand Down
18 changes: 18 additions & 0 deletions testscripts/unfinished/server__watch_hugo_stats.txt
@@ -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>

0 comments on commit 7ae62f4

Please sign in to comment.