diff options
Diffstat (limited to 'hugolib/filesystems/basefs.go')
-rw-r--r-- | hugolib/filesystems/basefs.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/hugolib/filesystems/basefs.go b/hugolib/filesystems/basefs.go index b90111e26..ed0d36de1 100644 --- a/hugolib/filesystems/basefs.go +++ b/hugolib/filesystems/basefs.go @@ -76,6 +76,8 @@ type BaseFs struct { theBigFs *filesystemsCollector + workingDir string + // Locks. buildMu Lockable // <project>/.hugo_build.lock } @@ -201,6 +203,27 @@ func (fs *BaseFs) ResolveJSConfigFile(name string) string { return "" } +// MakePathRelative creates a relative path from the given filename. +// It returns both the component name (e.g. layouts) and the path relative to that. +func (fs *BaseFs) MakePathRelative(filename string) (string, string) { + for _, sfs := range fs.FileSystems() { + if sfs.Contains(filename) { + if s, found := sfs.MakePathRelative(filename); found { + return sfs.Name, s + } + } + } + // May be a static file. + if s := fs.MakeStaticPathRelative(filename); s != "" { + return files.ComponentFolderStatic, s + } + // Fall back to relative to the working dir. + if strings.HasPrefix(filename, fs.workingDir) { + return "", strings.TrimPrefix(filename, fs.workingDir) + } + return "", "" +} + // SourceFilesystems contains the different source file systems. These can be // composite file systems (theme and project etc.), and they have all root // set to the source type the provides: data, i18n, static, layouts. @@ -235,6 +258,7 @@ type SourceFilesystems struct { func (s *SourceFilesystems) FileSystems() []*SourceFilesystem { return []*SourceFilesystem{ s.Content, + s.Assets, s.Data, s.I18n, s.Layouts, @@ -466,6 +490,7 @@ func NewBase(p *paths.Paths, logger loggers.Logger, options ...func(*BaseFs) err WorkDir: fs.WorkingDirReadOnly, PublishFs: publishFs, PublishFsStatic: publishFsStatic, + workingDir: p.Cfg.BaseConfig().WorkingDir, buildMu: buildMu, } |