hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit aee9e11a400ac231eb9e91c005f1fe039b106396
parent bd63c1aa56e05e88b162e9fd19b6d21fbc609df7
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Thu, 23 Dec 2021 08:57:28 +0100

Make sure we always create the /public folder

* Before this commit, when you had static files in the root of /content and no /public folder, that folder would not be created unless the /static syncer had already run.
* So, with a common pattern doing `rm -rf public && hugo` would the fail now and then because /static and /content are processed in parallel (unless you have cleanDestinationDir=true)
* This was even worse before commit 0b918e131fe523188b820d1e3fa0b08251abde69 – a frozen build.

Closes #8166

Diffstat:
Mhugolib/filesystems/basefs.go | 5+++++
1 file changed, 5 insertions(+), 0 deletions(-)
diff --git a/hugolib/filesystems/basefs.go b/hugolib/filesystems/basefs.go
@@ -428,6 +428,11 @@ func NewBase(p *paths.Paths, logger loggers.Logger, options ...func(*BaseFs) err
 		logger = loggers.NewWarningLogger()
 	}
 
+	// Make sure we always have the /public folder ready to use.
+	if err := fs.Destination.MkdirAll(p.AbsPublishDir, 0777); err != nil && !os.IsExist(err) {
+		return nil, err
+	}
+
 	publishFs := hugofs.NewBaseFileDecorator(afero.NewBasePathFs(fs.Destination, p.AbsPublishDir))
 	sourceFs := hugofs.NewBaseFileDecorator(afero.NewBasePathFs(fs.Source, p.WorkingDir))