diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-11-14 10:44:04 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-11-14 23:14:50 +0100 |
commit | 17d7ecde2b261d2ab29049d12361b66504e3f995 (patch) | |
tree | bf253ab587778ee2f5063360b8addf1488b8de98 /cache/filecache/filecache.go | |
parent | e4b2572880550a997d51dab3b198dac1fd642690 (diff) |
cache/filecache: Split implementation and config into separate files
Diffstat (limited to 'cache/filecache/filecache.go')
-rw-r--r-- | cache/filecache/filecache.go | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/cache/filecache/filecache.go b/cache/filecache/filecache.go index 4232c791a..c6ea02681 100644 --- a/cache/filecache/filecache.go +++ b/cache/filecache/filecache.go @@ -17,7 +17,6 @@ import ( "bytes" "io" "io/ioutil" - "path" "path/filepath" "strings" "time" @@ -28,56 +27,10 @@ import ( "github.com/gohugoio/hugo/hugolib/paths" - "github.com/pkg/errors" - "github.com/BurntSushi/locker" - "github.com/bep/mapstructure" "github.com/spf13/afero" ) -const ( - cachesConfigKey = "caches" - - resourcesGenDir = ":resourceDir/_gen" -) - -var defaultCacheConfig = cacheConfig{ - MaxAge: -1, // Never expire - Dir: ":cacheDir", -} - -const ( - cacheKeyGetJSON = "getjson" - cacheKeyGetCSV = "getcsv" - cacheKeyImages = "images" - cacheKeyAssets = "assets" -) - -var defaultCacheConfigs = map[string]cacheConfig{ - cacheKeyGetJSON: defaultCacheConfig, - cacheKeyGetCSV: defaultCacheConfig, - cacheKeyImages: cacheConfig{ - MaxAge: -1, - Dir: resourcesGenDir, - }, - cacheKeyAssets: cacheConfig{ - MaxAge: -1, - Dir: resourcesGenDir, - }, -} - -type cachesConfig map[string]cacheConfig - -type cacheConfig struct { - // Max age of cache entries in this cache. Any items older than this will - // be removed and not returned from the cache. - // -1 means forever, 0 means cache is disabled. - MaxAge int - - // The directory where files are stored. - Dir string -} - // Cache caches a set of files in a directory. This is usually a file on // disk, but since this is backed by an Afero file system, it can be anything. type Cache struct { @@ -316,26 +269,6 @@ func (f Caches) Get(name string) *Cache { return f[strings.ToLower(name)] } -// GetJSONCache gets the file cache for getJSON. -func (f Caches) GetJSONCache() *Cache { - return f[cacheKeyGetJSON] -} - -// GetCSVCache gets the file cache for getCSV. -func (f Caches) GetCSVCache() *Cache { - return f[cacheKeyGetCSV] -} - -// ImageCache gets the file cache for processed images. -func (f Caches) ImageCache() *Cache { - return f[cacheKeyImages] -} - -// AssetsCache gets the file cache for assets (processed resources, SCSS etc.). -func (f Caches) AssetsCache() *Cache { - return f[cacheKeyAssets] -} - // NewCachesFromPaths creates a new set of file caches from the given // configuration. func NewCachesFromPaths(p *paths.Paths) (Caches, error) { @@ -359,84 +292,6 @@ func NewCachesFromPaths(p *paths.Paths) (Caches, error) { return m, nil } -func decodeConfig(p *paths.Paths) (cachesConfig, error) { - c := make(cachesConfig) - valid := make(map[string]bool) - // Add defaults - for k, v := range defaultCacheConfigs { - c[k] = v - valid[k] = true - } - - cfg := p.Cfg - - m := cfg.GetStringMap(cachesConfigKey) - - _, isOsFs := p.Fs.Source.(*afero.OsFs) - - for k, v := range m { - cc := defaultCacheConfig - - if err := mapstructure.WeakDecode(v, &cc); err != nil { - return nil, err - } - - if cc.Dir == "" { - return c, errors.New("must provide cache Dir") - } - - name := strings.ToLower(k) - if !valid[name] { - return nil, errors.Errorf("%q is not a valid cache name", name) - } - - c[name] = cc - } - - // This is a very old flag in Hugo, but we need to respect it. - disabled := cfg.GetBool("ignoreCache") - - for k, v := range c { - v.Dir = filepath.Clean(v.Dir) - dir := filepath.ToSlash(v.Dir) - parts := strings.Split(dir, "/") - first := parts[0] - - if strings.HasPrefix(first, ":") { - resolved, err := resolveDirPlaceholder(p, first) - if err != nil { - return c, err - } - resolved = filepath.ToSlash(resolved) - - v.Dir = filepath.FromSlash(path.Join((append([]string{resolved}, parts[1:]...))...)) - - } else if isOsFs && !path.IsAbs(dir) { - return c, errors.Errorf("%q must either start with a placeholder (e.g. :cacheDir, :resourceDir) or be absolute", v.Dir) - } - - if disabled { - v.MaxAge = 0 - } - - c[k] = v - } - - return c, nil -} - -// Resolves :resourceDir => /myproject/resources etc., :cacheDir => ... -func resolveDirPlaceholder(p *paths.Paths, placeholder string) (string, error) { - switch strings.ToLower(placeholder) { - case ":resourcedir": - return p.AbsResourcesDir, nil - case ":cachedir": - return helpers.GetCacheDir(p.Fs.Source, p.Cfg) - } - - return "", errors.Errorf("%q is not a valid placeholder (valid values are :cacheDir or :resourceDir)", placeholder) -} - func cleanID(name string) string { return filepath.Clean(name) } |