From: Bjørn Erik Pedersen Date: Fri, 30 Oct 2020 09:14:08 +0000 (+0100) Subject: modules: Allow absolute paths for project imports X-Git-Tag: v0.77.0~5 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=beabc8d998249ecc5dd522d696dc6233a29131c2;p=brevno-suite%2Fhugo modules: Allow absolute paths for project imports Fixes #7910 --- diff --git a/modules/client.go b/modules/client.go index c6f43298..7d2175c9 100644 --- a/modules/client.go +++ b/modules/client.go @@ -614,10 +614,19 @@ func (c *Client) shouldVendor(path string) bool { } func (c *Client) createThemeDirname(modulePath string, isProjectMod bool) (string, error) { + invalid := errors.Errorf("invalid module path %q; must be relative to themesDir when defined outside of the project", modulePath) + modulePath = filepath.Clean(modulePath) + if filepath.IsAbs(modulePath) { + if isProjectMod { + return modulePath, nil + } + return "", invalid + } + moduleDir := filepath.Join(c.ccfg.ThemesDir, modulePath) if !isProjectMod && !strings.HasPrefix(moduleDir, c.ccfg.ThemesDir) { - return "", errors.Errorf("invalid module path %q; must be relative to themesDir when defined outside of the project", modulePath) + return "", invalid } return moduleDir, nil } diff --git a/modules/client_test.go b/modules/client_test.go index 7354f15e..7cc1058f 100644 --- a/modules/client_test.go +++ b/modules/client_test.go @@ -15,6 +15,7 @@ package modules import ( "bytes" + "fmt" "os" "path/filepath" "testing" @@ -157,6 +158,14 @@ project github.com/gohugoio/hugoTestModules1_darwin/modh2_2_2@v1.3.0+vendor dirname, err = client.createThemeDirname("../../foo", false) c.Assert(err, qt.Not(qt.IsNil)) + absDir := filepath.Join(client.ccfg.WorkingDir, "..", "..") + dirname, err = client.createThemeDirname(absDir, true) + c.Assert(err, qt.IsNil) + c.Assert(dirname, qt.Equals, absDir) + dirname, err = client.createThemeDirname(absDir, false) + fmt.Println(dirname) + c.Assert(err, qt.Not(qt.IsNil)) + }) }