diff options
author | Bjørn Erik Pedersen <[email protected]> | 2023-01-04 18:24:36 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2023-05-16 18:01:29 +0200 |
commit | 241b21b0fd34d91fccb2ce69874110dceae6f926 (patch) | |
tree | d4e0118eac7e9c42f065815447a70805f8d6ad3e /hugofs | |
parent | 6aededf6b42011c3039f5f66487a89a8dd65e0e7 (diff) | |
download | hugo-241b21b0fd34d91fccb2ce69874110dceae6f926.tar.gz hugo-241b21b0fd34d91fccb2ce69874110dceae6f926.zip |
Create a struct with all of Hugo's config options
Primary motivation is documentation, but it will also hopefully simplify the code.
Also,
* Lower case the default output format names; this is in line with the custom ones (map keys) and how
it's treated all the places. This avoids doing `stringds.EqualFold` everywhere.
Closes #10896
Closes #10620
Diffstat (limited to 'hugofs')
-rw-r--r-- | hugofs/fs.go | 43 | ||||
-rw-r--r-- | hugofs/fs_test.go | 22 | ||||
-rw-r--r-- | hugofs/noop_fs.go | 10 | ||||
-rw-r--r-- | hugofs/rootmapping_fs_test.go | 2 |
4 files changed, 39 insertions, 38 deletions
diff --git a/hugofs/fs.go b/hugofs/fs.go index 51bbe0619..855a821df 100644 --- a/hugofs/fs.go +++ b/hugofs/fs.go @@ -62,39 +62,55 @@ type Fs struct { // NewDefault creates a new Fs with the OS file system // as source and destination file systems. -func NewDefault(cfg config.Provider) *Fs { +func NewDefault(conf config.BaseConfig) *Fs { fs := Os - return newFs(fs, fs, cfg) + return NewFrom(fs, conf) } -// NewMem creates a new Fs with the MemMapFs -// as source and destination file systems. -// Useful for testing. -func NewMem(cfg config.Provider) *Fs { - fs := &afero.MemMapFs{} - return newFs(fs, fs, cfg) +func NewDefaultOld(cfg config.Provider) *Fs { + workingDir, publishDir := getWorkingPublishDir(cfg) + fs := Os + return newFs(fs, fs, workingDir, publishDir) } // NewFrom creates a new Fs based on the provided Afero Fs // as source and destination file systems. // Useful for testing. -func NewFrom(fs afero.Fs, cfg config.Provider) *Fs { - return newFs(fs, fs, cfg) +func NewFrom(fs afero.Fs, conf config.BaseConfig) *Fs { + return newFs(fs, fs, conf.WorkingDir, conf.PublishDir) +} + +func NewFromOld(fs afero.Fs, cfg config.Provider) *Fs { + workingDir, publishDir := getWorkingPublishDir(cfg) + return newFs(fs, fs, workingDir, publishDir) } // NewFrom creates a new Fs based on the provided Afero Fss // as the source and destination file systems. func NewFromSourceAndDestination(source, destination afero.Fs, cfg config.Provider) *Fs { - return newFs(source, destination, cfg) + workingDir, publishDir := getWorkingPublishDir(cfg) + return newFs(source, destination, workingDir, publishDir) } -func newFs(source, destination afero.Fs, cfg config.Provider) *Fs { +func getWorkingPublishDir(cfg config.Provider) (string, string) { workingDir := cfg.GetString("workingDir") - publishDir := cfg.GetString("publishDir") + publishDir := cfg.GetString("publishDirDynamic") + if publishDir == "" { + publishDir = cfg.GetString("publishDir") + } + return workingDir, publishDir + +} + +func newFs(source, destination afero.Fs, workingDir, publishDir string) *Fs { if publishDir == "" { panic("publishDir is empty") } + if workingDir == "." { + workingDir = "" + } + // Sanity check if IsOsFs(source) && len(workingDir) < 2 { panic("workingDir is too short") @@ -158,6 +174,7 @@ func MakeReadableAndRemoveAllModulePkgDir(fs afero.Fs, dir string) (int, error) } return nil }) + return counter, fs.RemoveAll(dir) } diff --git a/hugofs/fs_test.go b/hugofs/fs_test.go index f7203fac9..509aca62f 100644 --- a/hugofs/fs_test.go +++ b/hugofs/fs_test.go @@ -35,9 +35,10 @@ func TestIsOsFs(t *testing.T) { func TestNewDefault(t *testing.T) { c := qt.New(t) - v := config.NewWithTestDefaults() + v := config.New() v.Set("workingDir", t.TempDir()) - f := NewDefault(v) + v.Set("publishDir", "public") + f := NewDefaultOld(v) c.Assert(f.Source, qt.IsNotNil) c.Assert(f.Source, hqt.IsSameType, new(afero.OsFs)) @@ -49,20 +50,3 @@ func TestNewDefault(t *testing.T) { c.Assert(IsOsFs(f.PublishDir), qt.IsTrue) c.Assert(IsOsFs(f.Os), qt.IsTrue) } - -func TestNewMem(t *testing.T) { - c := qt.New(t) - v := config.NewWithTestDefaults() - f := NewMem(v) - - c.Assert(f.Source, qt.Not(qt.IsNil)) - c.Assert(f.Source, hqt.IsSameType, new(afero.MemMapFs)) - c.Assert(f.PublishDir, qt.Not(qt.IsNil)) - c.Assert(f.PublishDir, hqt.IsSameType, new(afero.BasePathFs)) - c.Assert(f.Os, hqt.IsSameType, new(afero.OsFs)) - c.Assert(f.WorkingDirReadOnly, qt.IsNotNil) - c.Assert(IsOsFs(f.Source), qt.IsFalse) - c.Assert(IsOsFs(f.WorkingDirReadOnly), qt.IsFalse) - c.Assert(IsOsFs(f.PublishDir), qt.IsFalse) - c.Assert(IsOsFs(f.Os), qt.IsTrue) -} diff --git a/hugofs/noop_fs.go b/hugofs/noop_fs.go index 8e4abbc6b..87f2cc9ff 100644 --- a/hugofs/noop_fs.go +++ b/hugofs/noop_fs.go @@ -34,7 +34,7 @@ type noOpFs struct { } func (fs noOpFs) Create(name string) (afero.File, error) { - return nil, errNoOp + panic(errNoOp) } func (fs noOpFs) Mkdir(name string, perm os.FileMode) error { @@ -62,7 +62,7 @@ func (fs noOpFs) RemoveAll(path string) error { } func (fs noOpFs) Rename(oldname string, newname string) error { - return errNoOp + panic(errNoOp) } func (fs noOpFs) Stat(name string) (os.FileInfo, error) { @@ -74,13 +74,13 @@ func (fs noOpFs) Name() string { } func (fs noOpFs) Chmod(name string, mode os.FileMode) error { - return errNoOp + panic(errNoOp) } func (fs noOpFs) Chtimes(name string, atime time.Time, mtime time.Time) error { - return errNoOp + panic(errNoOp) } func (fs *noOpFs) Chown(name string, uid int, gid int) error { - return errNoOp + panic(errNoOp) } diff --git a/hugofs/rootmapping_fs_test.go b/hugofs/rootmapping_fs_test.go index dda4bed4b..b71462a8d 100644 --- a/hugofs/rootmapping_fs_test.go +++ b/hugofs/rootmapping_fs_test.go @@ -30,7 +30,7 @@ import ( func TestLanguageRootMapping(t *testing.T) { c := qt.New(t) - v := config.NewWithTestDefaults() + v := config.New() v.Set("contentDir", "content") fs := NewBaseFileDecorator(afero.NewMemMapFs()) |