Fix content dir resolution when main project is a Hugo Module
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 16 Nov 2021 18:54:41 +0000 (19:54 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 16 Nov 2021 19:42:34 +0000 (20:42 +0100)
Fixes #9177

hugofs/fileinfo.go
hugofs/rootmapping_fs.go
hugolib/filesystems/basefs.go

index ea6ac4fd37a8375ef1fb875305794ac3fe67c21a..0a958a0c54750df0ca818f2d35b2b7f7885d0e0e 100644 (file)
@@ -64,6 +64,7 @@ type FileMeta struct {
        IsOrdered  bool
        IsSymlink  bool
        IsRootFile bool
+       IsProject  bool
        Watch      bool
 
        Classifier files.ContentClass
index bd10144ff4042f7b7286a6512f94ca0f307c9b3d..9fdce3ad760a1cea3d1f74d9e77ebed7b8e530e5 100644 (file)
@@ -62,6 +62,7 @@ func NewRootMappingFs(fs afero.Fs, rms ...RootMapping) (*RootMappingFs, error) {
                rm.Meta.BaseDir = rm.ToBasedir
                rm.Meta.MountRoot = rm.path
                rm.Meta.Module = rm.Module
+               rm.Meta.IsProject = rm.IsProject
 
                meta := rm.Meta.Copy()
 
@@ -118,6 +119,7 @@ type RootMapping struct {
        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.
+       IsProject bool      // Whether this is a mount in the main project.
        Meta      *FileMeta // File metadata (lang etc.)
 
        fi   FileMetaInfo
index be765ef9db61b75f6df94782fb47bb468aaa7018..a51cc4b2702209d1cd3a149b936d36a0164463cc 100644 (file)
@@ -136,7 +136,7 @@ func (b *BaseFs) AbsProjectContentDir(filename string) (string, string, error) {
        isAbs := filepath.IsAbs(filename)
        for _, dir := range b.SourceFilesystems.Content.Dirs {
                meta := dir.Meta()
-               if meta.Module != "project" {
+               if !meta.IsProject {
                        continue
                }
                if isAbs {
@@ -161,7 +161,7 @@ func (b *BaseFs) AbsProjectContentDir(filename string) (string, string, error) {
                contentDirs := b.SourceFilesystems.Content.Dirs
                for i := len(contentDirs) - 1; i >= 0; i-- {
                        meta := contentDirs[i].Meta()
-                       if meta.Module == "project" {
+                       if meta.IsProject {
                                return filename, filepath.Join(meta.Filename, filename), nil
                        }
                }
@@ -645,6 +645,7 @@ func (b *sourceFilesystemsBuilder) createModFs(
                        To:        filename,
                        ToBasedir: base,
                        Module:    md.Module.Path(),
+                       IsProject: md.isMainProject,
                        Meta: &hugofs.FileMeta{
                                Watch:           md.Watch(),
                                Weight:          mountWeight,