hugo: github.com/gohugoio/hugo/hugofs Index | Files | Directories

package hugofs

import "github.com/gohugoio/hugo/hugofs"

Package hugofs provides the file systems used by Hugo.

Package hugofs provides the file systems used by Hugo.

Index

Package Files

createcounting_fs.go decorators.go fileinfo.go filter_fs.go fs.go glob.go hashing_fs.go language_composite_fs.go noop_fs.go nosymlink_fs.go rootmapping_fs.go slice_fs.go stacktracer_fs.go walk.go

Variables

var (
    ErrPermissionSymlink = errors.New("symlinks not allowed in this filesystem")
)
var LanguageDirsMerger = func(lofi, bofi []os.FileInfo) ([]os.FileInfo, error) {
    m := make(map[string]FileMetaInfo)

    getKey := func(fim FileMetaInfo) string {
        return path.Join(fim.Meta().Lang(), fim.Name())
    }

    for _, fi := range lofi {
        fim := fi.(FileMetaInfo)
        m[getKey(fim)] = fim
    }

    for _, fi := range bofi {
        fim := fi.(FileMetaInfo)
        key := getKey(fim)
        _, found := m[key]
        if !found {
            m[key] = fim
        }
    }

    merged := make([]os.FileInfo, len(m))
    i := 0
    for _, v := range m {
        merged[i] = v
        i++
    }

    return merged, nil
}

LanguageDirsMerger implements the afero.DirsMerger interface, which is used to merge two directories.

var (

    // NoOpFs provides a no-op filesystem that implements the afero.Fs
    // interface.
    NoOpFs = &noOpFs{}
)
var (
    // Os points to the (real) Os filesystem.
    Os = &afero.OsFs{}
)

func DecorateBasePathFs Uses

func DecorateBasePathFs(base *afero.BasePathFs) afero.Fs

DecorateBasePathFs adds Path info to files and directories in the provided BasePathFs, using the base as base.

func Glob Uses

func Glob(fs afero.Fs, pattern string, handle func(fi FileMetaInfo) (bool, error)) error

Glob walks the fs and passes all matches to the handle func. The handle func can return true to signal a stop.

func MakeReadableAndRemoveAllModulePkgDir Uses

func MakeReadableAndRemoveAllModulePkgDir(fs afero.Fs, dir string) (int, error)

MakeReadableAndRemoveAllModulePkgDir makes any subdir in dir readable and then removes the root. TODO(bep) move this to a more suitable place.

func NewBaseFileDecorator Uses

func NewBaseFileDecorator(fs afero.Fs, callbacks ...func(fi FileMetaInfo)) afero.Fs

NewBaseFileDecorator decorates the given Fs to provide the real filename and an Opener func.

func NewCreateCountingFs Uses

func NewCreateCountingFs(fs afero.Fs) afero.Fs

func NewFilterFs Uses

func NewFilterFs(fs afero.Fs) (afero.Fs, error)

func NewHashingFs Uses

func NewHashingFs(delegate afero.Fs, hashReceiver FileHashReceiver) afero.Fs

NewHashingFs creates a new filesystem that will receive MD5 checksums of any written file content on Close. Note that this is probably not a good idea for "full build" situations, but when doing fast render mode, the amount of files published is low, and it would be really nice to know exactly which of these files where actually changed. Note that this will only work for file operations that use the io.Writer to write content to file, but that is fine for the "publish content" use case.

func NewLanguageCompositeFs Uses

func NewLanguageCompositeFs(base, overlay afero.Fs) afero.Fs

NewLanguageCompositeFs creates a composite and language aware filesystem. This is a hybrid filesystem. To get a specific file in Open, Stat etc., use the full filename to the target filesystem. This information is available in Readdir, Stat etc. via the special LanguageFileInfo FileInfo implementation.

func NewLanguageFs Uses

func NewLanguageFs(langs map[string]int, fs afero.Fs) (afero.Fs, error)

func NewNoSymlinkFs Uses

func NewNoSymlinkFs(fs afero.Fs, logger *loggers.Logger, allowFiles bool) afero.Fs

NewNoSymlinkFs creates a new filesystem that prevents symlinks.

func NewSliceFs Uses

func NewSliceFs(dirs ...FileMetaInfo) (afero.Fs, error)

func NewStacktracerFs Uses

func NewStacktracerFs(fs afero.Fs, pattern string) afero.Fs

NewStacktracerFs wraps the given fs printing stack traces for file creates matching the given regexp pattern.

type DuplicatesReporter Uses

type DuplicatesReporter interface {
    ReportDuplicates() string
}

DuplicatesReporter reports about duplicate filenames.

type FileHashReceiver Uses

type FileHashReceiver interface {
    OnFileClose(name, md5sum string)
}

FileHashReceiver will receive the filename an the content's MD5 sum on file close.

type FileMeta Uses

type FileMeta map[string]interface{}

func (FileMeta) Classifier Uses

func (f FileMeta) Classifier() files.ContentClass

func (FileMeta) Filename Uses

func (f FileMeta) Filename() string

func (FileMeta) Fs Uses

func (f FileMeta) Fs() afero.Fs

func (FileMeta) GetBool Uses

func (f FileMeta) GetBool(key string) bool

func (FileMeta) GetInt Uses

func (f FileMeta) GetInt(key string) int

func (FileMeta) GetOpener Uses

func (f FileMeta) GetOpener() func() (afero.File, error)

func (FileMeta) GetString Uses

func (f FileMeta) GetString(key string) string

func (FileMeta) IsOrdered Uses

func (f FileMeta) IsOrdered() bool
func (f FileMeta) IsSymlink() bool

IsSymlink returns whether this comes from a symlinked file or directory.

func (FileMeta) JoinStat Uses

func (f FileMeta) JoinStat(name string) (FileMetaInfo, error)

func (FileMeta) Lang Uses

func (f FileMeta) Lang() string

func (FileMeta) Module Uses

func (f FileMeta) Module() string

func (FileMeta) MountRoot Uses

func (f FileMeta) MountRoot() string

func (FileMeta) Name Uses

func (f FileMeta) Name() string

func (FileMeta) Open Uses

func (f FileMeta) Open() (afero.File, error)

func (FileMeta) Ordinal Uses

func (f FileMeta) Ordinal() int

func (FileMeta) OriginalFilename Uses

func (f FileMeta) OriginalFilename() string

func (FileMeta) Path Uses

func (f FileMeta) Path() string

Path returns the relative file path to where this file is mounted.

func (FileMeta) PathFile Uses

func (f FileMeta) PathFile() string

PathFile returns the relative file path for the file source.

func (FileMeta) SkipDir Uses

func (f FileMeta) SkipDir() bool

func (FileMeta) TranslationBaseName Uses

func (f FileMeta) TranslationBaseName() string

func (FileMeta) TranslationBaseNameWithExt Uses

func (f FileMeta) TranslationBaseNameWithExt() string

func (FileMeta) Translations Uses

func (f FileMeta) Translations() []string

func (FileMeta) Watch Uses

func (f FileMeta) Watch() bool

func (FileMeta) Weight Uses

func (f FileMeta) Weight() int

type FileMetaInfo Uses

type FileMetaInfo interface {
    os.FileInfo
    Meta() FileMeta
}

func NewFileMetaInfo Uses

func NewFileMetaInfo(fi os.FileInfo, m FileMeta) FileMetaInfo

type FilterFs Uses

type FilterFs struct {
    // contains filtered or unexported fields
}

FilterFs is an ordered composite filesystem.

func (*FilterFs) Chmod Uses

func (fs *FilterFs) Chmod(n string, m os.FileMode) error

func (*FilterFs) Chtimes Uses

func (fs *FilterFs) Chtimes(n string, a, m time.Time) error

func (*FilterFs) Create Uses

func (fs *FilterFs) Create(n string) (afero.File, error)

func (*FilterFs) LstatIfPossible Uses

func (fs *FilterFs) LstatIfPossible(name string) (os.FileInfo, bool, error)

func (*FilterFs) Mkdir Uses

func (fs *FilterFs) Mkdir(n string, p os.FileMode) error

func (*FilterFs) MkdirAll Uses

func (fs *FilterFs) MkdirAll(n string, p os.FileMode) error

func (*FilterFs) Name Uses

func (fs *FilterFs) Name() string

func (*FilterFs) Open Uses

func (fs *FilterFs) Open(name string) (afero.File, error)

func (*FilterFs) OpenFile Uses

func (fs *FilterFs) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error)

func (*FilterFs) ReadDir Uses

func (fs *FilterFs) ReadDir(name string) ([]os.FileInfo, error)

func (*FilterFs) Remove Uses

func (fs *FilterFs) Remove(n string) error

func (*FilterFs) RemoveAll Uses

func (fs *FilterFs) RemoveAll(p string) error

func (*FilterFs) Rename Uses

func (fs *FilterFs) Rename(o, n string) error

func (*FilterFs) Stat Uses

func (fs *FilterFs) Stat(name string) (os.FileInfo, error)

type Fs Uses

type Fs struct {
    // Source is Hugo's source file system.
    Source afero.Fs

    // Destination is Hugo's destination file system.
    Destination afero.Fs

    // Os is an OS file system.
    // NOTE: Field is currently unused.
    Os  afero.Fs

    // WorkingDir is a read-only file system
    // restricted to the project working dir.
    WorkingDir *afero.BasePathFs
}

Fs abstracts the file system to separate source and destination file systems and allows both to be mocked for testing.

func NewDefault Uses

func NewDefault(cfg config.Provider) *Fs

NewDefault creates a new Fs with the OS file system as source and destination file systems.

func NewFrom Uses

func NewFrom(fs afero.Fs, cfg config.Provider) *Fs

NewFrom creates a new Fs based on the provided Afero Fs as source and destination file systems. Useful for testing.

func NewMem Uses

func NewMem(cfg config.Provider) *Fs

NewMem creates a new Fs with the MemMapFs as source and destination file systems. Useful for testing.

type Reseter Uses

type Reseter interface {
    Reset()
}

Reseter is implemented by some of the stateful filesystems.

type RootMapping Uses

type RootMapping struct {
    From      string   // The virtual mount.
    To        string   // The source directory or file.
    ToBasedir string   // The base of To. May be empty if an absolute path was provided.
    Module    string   // The module path/ID.
    Meta      FileMeta // File metadata (lang etc.)
    // contains filtered or unexported fields
}

RootMapping describes a virtual file or directory mount.

type RootMappingFs Uses

type RootMappingFs struct {
    afero.Fs
    // contains filtered or unexported fields
}

A RootMappingFs maps several roots into one. Note that the root of this filesystem is directories only, and they will be returned in Readdir and Readdirnames in the order given.

func NewRootMappingFs Uses

func NewRootMappingFs(fs afero.Fs, rms ...RootMapping) (*RootMappingFs, error)

NewRootMappingFs creates a new RootMappingFs on top of the provided with root mappings with some optional metadata about the root. Note that From represents a virtual root that maps to the actual filename in To.

func (*RootMappingFs) Dirs Uses

func (fs *RootMappingFs) Dirs(base string) ([]FileMetaInfo, error)

func (RootMappingFs) Filter Uses

func (fs RootMappingFs) Filter(f func(m RootMapping) bool) *RootMappingFs

Filter creates a copy of this filesystem with only mappings matching a filter.

func (*RootMappingFs) LstatIfPossible Uses

func (fs *RootMappingFs) LstatIfPossible(name string) (os.FileInfo, bool, error)

LstatIfPossible returns the os.FileInfo structure describing a given file.

func (*RootMappingFs) Open Uses

func (fs *RootMappingFs) Open(name string) (afero.File, error)

Open opens the named file for reading.

func (*RootMappingFs) Stat Uses

func (fs *RootMappingFs) Stat(name string) (os.FileInfo, error)

Stat returns the os.FileInfo structure describing a given file. If there is an error, it will be of type *os.PathError.

type SliceFs Uses

type SliceFs struct {
    // contains filtered or unexported fields
}

SliceFs is an ordered composite filesystem.

func (*SliceFs) Chmod Uses

func (fs *SliceFs) Chmod(n string, m os.FileMode) error

func (*SliceFs) Chtimes Uses

func (fs *SliceFs) Chtimes(n string, a, m time.Time) error

func (*SliceFs) Create Uses

func (fs *SliceFs) Create(n string) (afero.File, error)

func (*SliceFs) LstatIfPossible Uses

func (fs *SliceFs) LstatIfPossible(name string) (os.FileInfo, bool, error)

func (*SliceFs) Mkdir Uses

func (fs *SliceFs) Mkdir(n string, p os.FileMode) error

func (*SliceFs) MkdirAll Uses

func (fs *SliceFs) MkdirAll(n string, p os.FileMode) error

func (*SliceFs) Name Uses

func (fs *SliceFs) Name() string

func (*SliceFs) Open Uses

func (fs *SliceFs) Open(name string) (afero.File, error)

func (*SliceFs) OpenFile Uses

func (fs *SliceFs) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error)

func (*SliceFs) ReadDir Uses

func (fs *SliceFs) ReadDir(name string) ([]os.FileInfo, error)

func (*SliceFs) Remove Uses

func (fs *SliceFs) Remove(n string) error

func (*SliceFs) RemoveAll Uses

func (fs *SliceFs) RemoveAll(p string) error

func (*SliceFs) Rename Uses

func (fs *SliceFs) Rename(o, n string) error

func (*SliceFs) Stat Uses

func (fs *SliceFs) Stat(name string) (os.FileInfo, error)

type WalkFunc Uses

type WalkFunc func(path string, info FileMetaInfo, err error) error

type WalkHook Uses

type WalkHook func(dir FileMetaInfo, path string, readdir []FileMetaInfo) ([]FileMetaInfo, error)

type Walkway Uses

type Walkway struct {
    // contains filtered or unexported fields
}

func NewWalkway Uses

func NewWalkway(cfg WalkwayConfig) *Walkway

func (*Walkway) Walk Uses

func (w *Walkway) Walk() error

type WalkwayConfig Uses

type WalkwayConfig struct {
    Fs       afero.Fs
    Root     string
    BasePath string

    Logger *loggers.Logger

    // One or both of these may be pre-set.
    Info       FileMetaInfo
    DirEntries []FileMetaInfo

    WalkFn   WalkFunc
    HookPre  WalkHook
    HookPost WalkHook
}

Directories

PathSynopsis
files
glob

Package hugofs imports 27 packages (graph) and is imported by 321 packages. Updated 2020-03-19. Refresh now. Tools for package owners.