aboutsummaryrefslogtreecommitdiffhomepage
path: root/hugolib/filesystems/basefs.go
diff options
context:
space:
mode:
Diffstat (limited to 'hugolib/filesystems/basefs.go')
-rw-r--r--hugolib/filesystems/basefs.go25
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,
}