diff options
Diffstat (limited to 'hugofs/fs.go')
-rw-r--r-- | hugofs/fs.go | 83 |
1 files changed, 78 insertions, 5 deletions
diff --git a/hugofs/fs.go b/hugofs/fs.go index 7807bf935..a3cb55ea1 100644 --- a/hugofs/fs.go +++ b/hugofs/fs.go @@ -1,4 +1,4 @@ -// Copyright 2015 The Hugo Authors. All rights reserved. +// Copyright 2016 The Hugo Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -13,8 +13,81 @@ package hugofs -import "github.com/spf13/afero" +import ( + "github.com/spf13/afero" + "github.com/spf13/viper" +) -var SourceFs afero.Fs = new(afero.OsFs) -var DestinationFS afero.Fs = new(afero.OsFs) -var OsFs afero.Fs = new(afero.OsFs) +var ( + sourceFs afero.Fs + destinationFs afero.Fs + osFs afero.Fs = &afero.OsFs{} + workingDirFs *afero.BasePathFs +) + +// Source returns Hugo's source file system. +func Source() afero.Fs { + return sourceFs +} + +// SetSource sets Hugo's source file system +// and re-initializes dependent file systems. +func SetSource(fs afero.Fs) { + sourceFs = fs + initSourceDependencies() +} + +// Destination returns Hugo's destionation file system. +func Destination() afero.Fs { + return destinationFs +} + +// SetDestination sets Hugo's destionation file system +func SetDestination(fs afero.Fs) { + destinationFs = fs +} + +// Os returns an OS file system. +func Os() afero.Fs { + return osFs +} + +// WorkingDir returns a read-only file system +// restricted to the project working dir. +func WorkingDir() *afero.BasePathFs { + return workingDirFs +} + +// InitFs initializes with the OS file system +// as source and destination file systems. +func InitDefaultFs() { + InitFs(&afero.OsFs{}) +} + +// InitMemFs initializes with a MemMapFs as source and destination file systems. +// Useful for testing. +func InitMemFs() { + InitFs(&afero.MemMapFs{}) +} + +// InitFs initializes with the given file system +// as source and destination file systems. +func InitFs(fs afero.Fs) { + sourceFs = fs + destinationFs = fs + + initSourceDependencies() +} + +func initSourceDependencies() { + workingDir := viper.GetString("WorkingDir") + + if workingDir != "" { + workingDirFs = afero.NewBasePathFs(afero.NewReadOnlyFs(sourceFs), workingDir).(*afero.BasePathFs) + } + +} + +func init() { + InitDefaultFs() +} |