Skip to content

Commit

Permalink
Fix abs path handling in module mounts
Browse files Browse the repository at this point in the history
Fixes #6622
  • Loading branch information
bep committed Dec 19, 2019
1 parent 158e7ec commit ad6504e
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 6 deletions.
3 changes: 3 additions & 0 deletions hugolib/filesystems/basefs.go
Original file line number Diff line number Diff line change
Expand Up @@ -531,6 +531,9 @@ func (b *sourceFilesystemsBuilder) createModFs(
)

absPathify := func(path string) string {
if filepath.IsAbs(path) {
return path
}
return paths.AbsPathify(md.dir, path)
}

Expand Down
54 changes: 54 additions & 0 deletions hugolib/hugo_modules_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -569,3 +569,57 @@ func TestSiteWithGoModButNoModules(t *testing.T) {
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)

}
8 changes: 4 additions & 4 deletions hugolib/resource_chain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,9 @@ func TestSCSSWithThemeOverrides(t *testing.T) {
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")
Expand Down Expand Up @@ -174,9 +174,9 @@ func TestSCSSWithIncludePathsSass(t *testing.T) {
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)
Expand Down
12 changes: 10 additions & 2 deletions modules/collect.go
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ func (c *collector) loadModules() error {
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()

Expand All @@ -562,8 +562,16 @@ func (c *collector) normalizeMounts(owner Module, mounts []Mount) ([]Mount, erro
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
Expand Down

0 comments on commit ad6504e

Please sign in to comment.