shithub: hugo

Download patch

ref: 952a3194962dd91f87e5bd227a1591b00c39ff05
parent: 321418f22a4a94b87f01e1403a2f4a71106461fb
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Thu Aug 15 12:44:44 EDT 2019

Fix live reload mount logic with sub paths

Fixes #6209

--- a/hugolib/filesystems/basefs.go
+++ b/hugolib/filesystems/basefs.go
@@ -243,11 +243,11 @@
 		currentPath := meta.Filename()
 
 		if strings.HasPrefix(filename, currentPath) {
-			if path := meta.Path(); path != "" {
-				currentPath = strings.TrimRight(strings.TrimSuffix(currentPath, path), filePathSeparator)
+			rel := strings.TrimPrefix(filename, currentPath)
+			if mp := meta.Path(); mp != "" {
+				rel = filepath.Join(mp, rel)
 			}
-
-			return strings.TrimPrefix(filename, currentPath)
+			return strings.TrimPrefix(rel, filePathSeparator)
 		}
 	}
 	return ""
--- a/hugolib/filesystems/basefs_test.go
+++ b/hugolib/filesystems/basefs_test.go
@@ -360,16 +360,21 @@
 	workDir := "mywork"
 	v.Set("workingDir", workDir)
 
-	c.Assert(fs.Source.MkdirAll(filepath.Join(workDir, "dist"), 0777), qt.IsNil)
-	c.Assert(fs.Source.MkdirAll(filepath.Join(workDir, "static"), 0777), qt.IsNil)
+	c.Assert(fs.Source.MkdirAll(filepath.Join(workDir, "dist", "d1"), 0777), qt.IsNil)
+	c.Assert(fs.Source.MkdirAll(filepath.Join(workDir, "static", "d2"), 0777), qt.IsNil)
+	c.Assert(fs.Source.MkdirAll(filepath.Join(workDir, "dust", "d2"), 0777), qt.IsNil)
 
 	moduleCfg := map[string]interface{}{
 		"mounts": []interface{}{
 			map[string]interface{}{
 				"source": "dist",
-				"target": "static/dist",
+				"target": "static/mydist",
 			},
 			map[string]interface{}{
+				"source": "dust",
+				"target": "static/foo/bar",
+			},
+			map[string]interface{}{
 				"source": "static",
 				"target": "static",
 			},
@@ -388,8 +393,10 @@
 	sfs := bfs.Static[""]
 	c.Assert(sfs, qt.Not(qt.IsNil))
 
-	c.Assert(sfs.MakePathRelative(filepath.Join(workDir, "static", "foo.txt")), qt.Equals, filepath.FromSlash("/foo.txt"))
-	c.Assert(sfs.MakePathRelative(filepath.Join(workDir, "dist", "foo.txt")), qt.Equals, filepath.FromSlash("/dist/foo.txt"))
+	c.Assert(sfs.MakePathRelative(filepath.Join(workDir, "dist", "d1", "foo.txt")), qt.Equals, filepath.FromSlash("mydist/d1/foo.txt"))
+	c.Assert(sfs.MakePathRelative(filepath.Join(workDir, "static", "d2", "foo.txt")), qt.Equals, filepath.FromSlash("d2/foo.txt"))
+	c.Assert(sfs.MakePathRelative(filepath.Join(workDir, "dust", "d3", "foo.txt")), qt.Equals, filepath.FromSlash("foo/bar/d3/foo.txt"))
+
 }
 
 func checkFileCount(fs afero.Fs, dirname string, c *qt.C, expected int) {