b.Build(BuildCfg{})
}
+
+// https://github.com/gohugoio/hugo/issues/6622
+func TestModuleAbsMount(t *testing.T) {
+ t.Parallel()
+
+ c := qt.New(t)
+ // We need to use the OS fs for this.
+ workDir, clean1, err := htesting.CreateTempDir(hugofs.Os, "hugo-project")
+ c.Assert(err, qt.IsNil)
+ absContentDir, clean2, err := htesting.CreateTempDir(hugofs.Os, "hugo-content")
+ c.Assert(err, qt.IsNil)
+
+ cfg := viper.New()
+ cfg.Set("workingDir", workDir)
+ fs := hugofs.NewFrom(hugofs.Os, cfg)
+
+ config := fmt.Sprintf(`
+workingDir=%q
+
+[module]
+ [[module.mounts]]
+ source = %q
+ target = "content"
+
+`, workDir, absContentDir)
+
+ defer clean1()
+ defer clean2()
+
+ b := newTestSitesBuilder(t)
+ b.Fs = fs
+
+ contentFilename := filepath.Join(absContentDir, "p1.md")
+ afero.WriteFile(hugofs.Os, contentFilename, []byte(`
+---
+title: Abs
+---
+
+Content.
+`), 0777)
+
+ b.WithWorkingDir(workDir).WithConfigFile("toml", config)
+ b.WithContent("dummy.md", "")
+
+ b.WithTemplatesAdded("index.html", `
+{{ $p1 := site.GetPage "p1" }}
+P1: {{ $p1.Title }}|{{ $p1.RelPermalink }}|Filename: {{ $p1.File.Filename }}
+`)
+
+ b.Build(BuildCfg{})
+
+ b.AssertFileContent("public/index.html", "P1: Abs|/p1/", "Filename: "+contentFilename)
+
+}
t.Skip("Skip SCSS")
}
c := qt.New(t)
- workDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugo-scss-include")
+ workDir, clean1, err := htesting.CreateTempDir(hugofs.Os, "hugo-scss-include")
c.Assert(err, qt.IsNil)
- defer clean()
+ defer clean1()
theme := "mytheme"
themesDir := filepath.Join(workDir, "themes")
t.Skip("Skip SCSS")
}
c := qt.New(t)
- workDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugo-scss-includepaths")
+ workDir, clean1, err := htesting.CreateTempDir(hugofs.Os, "hugo-scss-includepaths")
c.Assert(err, qt.IsNil)
- defer clean()
+ defer clean1()
v := viper.New()
v.Set("workingDir", workDir)
return nil
}
-func (c *collector) normalizeMounts(owner Module, mounts []Mount) ([]Mount, error) {
+func (c *collector) normalizeMounts(owner *moduleAdapter, mounts []Mount) ([]Mount, error) {
var out []Mount
dir := owner.Dir()
mnt.Source = filepath.Clean(mnt.Source)
mnt.Target = filepath.Clean(mnt.Target)
+ var sourceDir string
+
+ if owner.projectMod && filepath.IsAbs(mnt.Source) {
+ // Abs paths in the main project is allowed.
+ sourceDir = mnt.Source
+ } else {
+ sourceDir = filepath.Join(dir, mnt.Source)
+ }
+
// Verify that Source exists
- sourceDir := filepath.Join(dir, mnt.Source)
_, err := c.fs.Stat(sourceDir)
if err != nil {
continue