Add a consolidated file cache
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 8 Nov 2018 09:24:13 +0000 (10:24 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 13 Nov 2018 13:19:42 +0000 (14:19 +0100)
commitf7aeaa61291dd75f92901bcbeecc7fce07a28dec
tree409c03e259a38fce2beeab46655fd5108c84cd5c
parent7d78a2afd3c4a6c4af77a4ddcbd2a82f15986048
Add a consolidated file cache

This commits reworks how file caching is performed in Hugo. Now there is only one way, and it can be configured.

This is the default configuration:

```toml
[caches]
[caches.getjson]
dir = ":cacheDir"
maxAge = -1
[caches.getcsv]
dir = ":cacheDir"
maxAge = -1
[caches.images]
dir = ":resourceDir/_gen"
maxAge = -1
[caches.assets]
dir = ":resourceDir/_gen"
maxAge = -1
```

You can override any of these cache setting in your own `config.toml`.

The placeholders explained:

`:cacheDir`: This is the value of the `cacheDir` config option if set (can also be set via OS env variable `HUGO_CACHEDIR`). It will fall back to `/opt/build/cache/hugo_cache/` on Netlify, or a `hugo_cache` directory below the OS temp dir for the others.
`:resourceDir`: This is the value of the `resourceDir` config option.

`maxAge` is the time in seconds before a cache entry will be evicted, -1 means forever and 0 effectively turns that particular cache off.

This means that if you run your builds on Netlify, all caches configured with `:cacheDir` will be saved and restored on the next build. For other CI vendors, please read their documentation. For an CircleCI example, see https://github.com/bep/hugo-sass-test/blob/6c3960a8f4b90e8938228688bc49bdcdd6b2d99e/.circleci/config.yml

Fixes #5404
26 files changed:
cache/filecache/filecache.go [new file with mode: 0644]
cache/filecache/filecache_test.go [new file with mode: 0644]
commands/commandeer.go
common/hugio/writers.go
deps/deps.go
go.mod
go.sum
helpers/path.go
hugolib/filesystems/basefs.go
hugolib/filesystems/basefs_test.go
hugolib/prune_resources.go
resource/bundler/bundler.go
resource/create/create.go
resource/image.go
resource/image_cache.go
resource/image_test.go
resource/resource.go
resource/resource_cache.go
resource/testhelpers_test.go
resource/transform.go
tpl/data/cache.go [deleted file]
tpl/data/cache_test.go [deleted file]
tpl/data/data.go
tpl/data/init_test.go
tpl/data/resources.go
tpl/data/resources_test.go