Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commands/static_syncer.go1
-rw-r--r--hugofs/rootmapping_fs_test.go4
-rw-r--r--hugolib/filesystems/basefs.go8
-rw-r--r--hugolib/filesystems/basefs_test.go39
4 files changed, 51 insertions, 1 deletions
diff --git a/commands/static_syncer.go b/commands/static_syncer.go
index 6103fe71c..ab7cc4fe2 100644
--- a/commands/static_syncer.go
+++ b/commands/static_syncer.go
@@ -80,6 +80,7 @@ func (s *staticSyncer) syncsStaticEvents(staticEvents []fsnotify.Event) error {
fromPath := ev.Name
relPath := sourceFs.MakePathRelative(fromPath)
+
if relPath == "" {
// Not member of this virtual host.
continue
diff --git a/hugofs/rootmapping_fs_test.go b/hugofs/rootmapping_fs_test.go
index b3c491f17..0b3f251f2 100644
--- a/hugofs/rootmapping_fs_test.go
+++ b/hugofs/rootmapping_fs_test.go
@@ -283,6 +283,10 @@ func TestRootMappingFsMountOverlap(t *testing.T) {
assert.Equal([]string{"b.txt", "c"}, getDirnames("static/b"))
assert.Equal([]string{"c.txt"}, getDirnames("static/b/c"))
+ fi, err := rfs.Stat(filepath.FromSlash("static/b/b.txt"))
+ assert.NoError(err)
+ assert.Equal("b.txt", fi.Name())
+
}
func TestRootMappingFsOs(t *testing.T) {
diff --git a/hugolib/filesystems/basefs.go b/hugolib/filesystems/basefs.go
index 2d8f54d65..2a1f994b2 100644
--- a/hugolib/filesystems/basefs.go
+++ b/hugolib/filesystems/basefs.go
@@ -239,8 +239,14 @@ func (s SourceFilesystems) MakeStaticPathRelative(filename string) string {
// It will return an empty string if the filename is not a member of this filesystem.
func (d *SourceFilesystem) MakePathRelative(filename string) string {
for _, dir := range d.Dirs {
- currentPath := dir.(hugofs.FileMetaInfo).Meta().Filename()
+ meta := dir.(hugofs.FileMetaInfo).Meta()
+ currentPath := meta.Filename()
+
if strings.HasPrefix(filename, currentPath) {
+ if path := meta.Path(); path != "" {
+ currentPath = strings.TrimRight(strings.TrimSuffix(currentPath, path), filePathSeparator)
+ }
+
return strings.TrimPrefix(filename, currentPath)
}
}
diff --git a/hugolib/filesystems/basefs_test.go b/hugolib/filesystems/basefs_test.go
index 3b4e4cd16..62f968684 100644
--- a/hugolib/filesystems/basefs_test.go
+++ b/hugolib/filesystems/basefs_test.go
@@ -355,6 +355,45 @@ func TestStaticFsMultiHost(t *testing.T) {
checkFileContent(noFs, "f2.txt", assert, "Hugo Themes Still Rocks!")
}
+func TestMakePathRelative(t *testing.T) {
+ assert := require.New(t)
+ v := createConfig()
+ fs := hugofs.NewMem(v)
+ workDir := "mywork"
+ v.Set("workingDir", workDir)
+
+ assert.NoError(fs.Source.MkdirAll(filepath.Join(workDir, "dist"), 0777))
+ assert.NoError(fs.Source.MkdirAll(filepath.Join(workDir, "static"), 0777))
+
+ moduleCfg := map[string]interface{}{
+ "mounts": []interface{}{
+ map[string]interface{}{
+ "source": "dist",
+ "target": "static/dist",
+ },
+ map[string]interface{}{
+ "source": "static",
+ "target": "static",
+ },
+ },
+ }
+
+ v.Set("module", moduleCfg)
+
+ assert.NoError(initConfig(fs.Source, v))
+
+ p, err := paths.New(fs, v)
+ assert.NoError(err)
+ bfs, err := NewBase(p, nil)
+ assert.NoError(err)
+
+ sfs := bfs.Static[""]
+ assert.NotNil(sfs)
+
+ assert.Equal(filepath.FromSlash("/foo.txt"), sfs.MakePathRelative(filepath.Join(workDir, "static", "foo.txt")))
+ assert.Equal(filepath.FromSlash("/dist/foo.txt"), sfs.MakePathRelative(filepath.Join(workDir, "dist", "foo.txt")))
+}
+
func checkFileCount(fs afero.Fs, dirname string, assert *require.Assertions, expected int) {
count, fnames, err := countFileaAndGetFilenames(fs, dirname)
assert.NoError(err, fnames)