hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit beabc8d998249ecc5dd522d696dc6233a29131c2
parent 332b65e4ccb6ac0d606de2a1b23f5189c72542be
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Fri, 30 Oct 2020 10:14:08 +0100

modules: Allow absolute paths for project imports

Fixes #7910

Diffstat:
Mmodules/client.go | 11++++++++++-
Mmodules/client_test.go | 9+++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git 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
@@ -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))
+
 	})
 
 }