Fix the "page picker" logic in --navigateToChanged

Fixes #9051
This commit is contained in:
Bjørn Erik Pedersen 2021-10-17 16:11:00 +02:00
parent ba35e69856
commit 096f5e1921
2 changed files with 21 additions and 5 deletions

View file

@ -30,6 +30,8 @@ import (
"syscall" "syscall"
"time" "time"
"github.com/gohugoio/hugo/hugofs/files"
"github.com/gohugoio/hugo/common/types" "github.com/gohugoio/hugo/common/types"
"github.com/gohugoio/hugo/hugofs" "github.com/gohugoio/hugo/hugofs"
@ -1200,13 +1202,17 @@ func partitionDynamicEvents(sourceFs *filesystems.SourceFilesystems, events []fs
func pickOneWriteOrCreatePath(events []fsnotify.Event) string { func pickOneWriteOrCreatePath(events []fsnotify.Event) string {
name := "" name := ""
// Some editors (for example notepad.exe on Windows) triggers a change
// both for directory and file. So we pick the longest path, which should
// be the file itself.
for _, ev := range events { for _, ev := range events {
if (ev.Op&fsnotify.Write == fsnotify.Write || ev.Op&fsnotify.Create == fsnotify.Create) && len(ev.Name) > len(name) { if ev.Op&fsnotify.Write == fsnotify.Write || ev.Op&fsnotify.Create == fsnotify.Create {
if files.IsIndexContentFile(ev.Name) {
return ev.Name
}
if files.IsContentFile(ev.Name) {
name = ev.Name name = ev.Name
} }
}
} }
return name return name

View file

@ -69,6 +69,16 @@ func IsContentFile(filename string) bool {
return contentFileExtensionsSet[strings.TrimPrefix(filepath.Ext(filename), ".")] return contentFileExtensionsSet[strings.TrimPrefix(filepath.Ext(filename), ".")]
} }
func IsIndexContentFile(filename string) bool {
if !IsContentFile(filename) {
return false
}
base := filepath.Base(filename)
return strings.HasPrefix(base, "index.") || strings.HasPrefix(base, "_index.")
}
func IsHTMLFile(filename string) bool { func IsHTMLFile(filename string) bool {
return htmlFileExtensionsSet[strings.TrimPrefix(filepath.Ext(filename), ".")] return htmlFileExtensionsSet[strings.TrimPrefix(filepath.Ext(filename), ".")]
} }