cfg := res.Cfg
all := &Config{}
+
err := decodeConfigFromParams(fs, bcfg, cfg, all, nil)
if err != nil {
return nil, err
bcfg.PublishDir = all.PublishDir
res.BaseConfig = bcfg
+ all.CommonDirs.CacheDir = bcfg.CacheDir
+ for _, l := range langConfigs {
+ l.CommonDirs.CacheDir = bcfg.CacheDir
+ }
cm := &Configs{
Base: all,
// The dir will be created if it does not exist.
func GetCacheDir(fs afero.Fs, cacheDir string) (string, error) {
cacheDir = cacheDirDefault(cacheDir)
+
if cacheDir != "" {
exists, err := DirExists(cacheDir, fs)
if err != nil {
return cacheDir, nil
}
+ const hugoCacheBase = "hugo_cache"
+
+ userCacheDir, err := os.UserCacheDir()
+ if err == nil {
+ cacheDir := filepath.Join(userCacheDir, hugoCacheBase)
+ if err := fs.Mkdir(cacheDir, 0777); err == nil || os.IsExist(err) {
+ return cacheDir, nil
+ }
+ }
+
// Fall back to a cache in /tmp.
userName := os.Getenv("USER")
if userName != "" {
- return GetTempDir("hugo_cache_"+userName, fs), nil
+ return GetTempDir(hugoCacheBase+"_"+userName, fs), nil
} else {
- return GetTempDir("hugo_cache", fs), nil
+ return GetTempDir(hugoCacheBase, fs), nil
}
}
return "/opt/build/cache/hugo_cache/"
}
- // This will fall back to an hugo_cache folder in the tmp dir, which should work fine for most CI
+ // This will fall back to an hugo_cache folder in either os.UserCacheDir or the tmp dir, which should work fine for most CI
// providers. See this for a working CircleCI setup:
// https://github.com/bep/hugo-sass-test/blob/6c3960a8f4b90e8938228688bc49bdcdd6b2d99e/.circleci/config.yml
// If not, they can set the HUGO_CACHEDIR environment variable or cacheDir config key.
return func(env *testscript.Env) error {
var keyVals []string
keyVals = append(keyVals, "HUGO_TESTRUN", "true")
- hugoCachedDir := filepath.Join(env.WorkDir, "hugocache")
- keyVals = append(keyVals, "HUGO_CACHEDIR", hugoCachedDir)
+ keyVals = append(keyVals, "HUGO_CACHEDIR", filepath.Join(env.WorkDir, "hugocache"))
+ xdghome := filepath.Join(env.WorkDir, "xdgcachehome")
+ keyVals = append(keyVals, "XDG_CACHE_HOME", xdghome)
+ home := filepath.Join(env.WorkDir, "home")
+ keyVals = append(keyVals, "HOME", home)
+
+ if runtime.GOOS == "darwin" {
+ if err := os.MkdirAll(filepath.Join(home, "Library", "Caches"), 0777); err != nil {
+ return err
+ }
+ }
+
+ if runtime.GOOS == "linux" {
+ if err := os.MkdirAll(xdghome, 0777); err != nil {
+ return err
+ }
+ }
keyVals = append(keyVals, "SOURCE", sourceDir)
--- /dev/null
+
+[windows] skip
+
+env HUGO_CACHEDIR=
+hugo config
+
+[darwin] stdout 'home/Library/Caches/hugo_cache'
+[linux] stdout 'xdgcachehome/hugo_cache'
+
+# Repeat it to make sure it handles an existing hugo_cache dir.
+hugo config
+
+[darwin] stdout 'home/Library/Caches/hugo_cache'
+[linux] stdout 'xdgcachehome/hugo_cache'
+
+-- hugo.toml --
+baseURL="https://example.com/"
+title="My New Hugo Site"