hugo

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

git clone git://git.shimmy1996.com/hugo.git
commit d8d6a25b5755bedaf90261a1539dc37a2f05c3df
parent 9f12be54ee84f24efdf7c58f05867e8d0dea2ccb
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Tue,  7 Apr 2020 10:13:55 +0200

modules: Fix hugo mod vendor for regular file mounts

Fixes #7140

Diffstat:
Mmodules/client.go | 26++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/modules/client.go b/modules/client.go
@@ -194,6 +194,9 @@ func (c *Client) Vendor() error {
 	if err := c.rmVendorDir(vendorDir); err != nil {
 		return err
 	}
+	if err := c.fs.MkdirAll(vendorDir, 0755); err != nil {
+		return err
+	}
 
 	// Write the modules list to modules.txt.
 	//
@@ -228,8 +231,27 @@ func (c *Client) Vendor() error {
 		dir := t.Dir()
 
 		for _, mount := range t.Mounts() {
-			if err := hugio.CopyDir(c.fs, filepath.Join(dir, mount.Source), filepath.Join(vendorDir, t.Path(), mount.Source), nil); err != nil {
-				return errors.Wrap(err, "failed to copy module to vendor dir")
+			sourceFilename := filepath.Join(dir, mount.Source)
+			targetFilename := filepath.Join(vendorDir, t.Path(), mount.Source)
+			fi, err := c.fs.Stat(sourceFilename)
+			if err != nil {
+				return errors.Wrap(err, "failed to vendor module")
+			}
+
+			if fi.IsDir() {
+				if err := hugio.CopyDir(c.fs, sourceFilename, targetFilename, nil); err != nil {
+					return errors.Wrap(err, "failed to copy module to vendor dir")
+				}
+			} else {
+				targetDir := filepath.Dir(targetFilename)
+
+				if err := c.fs.MkdirAll(targetDir, 0755); err != nil {
+					return errors.Wrap(err, "failed to make target dir")
+				}
+
+				if err := hugio.CopyFile(c.fs, sourceFilename, targetFilename); err != nil {
+					return errors.Wrap(err, "failed to copy module file to vendor")
+				}
 			}
 		}