From 096f5e19217e985bccbf6c539e1b220541ffa6f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 17 Oct 2021 16:11:00 +0200 Subject: [PATCH] Fix the "page picker" logic in --navigateToChanged Fixes #9051 --- commands/hugo.go | 16 +++++++++++----- hugofs/files/classifier.go | 10 ++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/commands/hugo.go b/commands/hugo.go index fbe2349a0..4f011a33b 100644 --- a/commands/hugo.go +++ b/commands/hugo.go @@ -30,6 +30,8 @@ import ( "syscall" "time" + "github.com/gohugoio/hugo/hugofs/files" + "github.com/gohugoio/hugo/common/types" "github.com/gohugoio/hugo/hugofs" @@ -1200,12 +1202,16 @@ func partitionDynamicEvents(sourceFs *filesystems.SourceFilesystems, events []fs func pickOneWriteOrCreatePath(events []fsnotify.Event) string { 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 { - if (ev.Op&fsnotify.Write == fsnotify.Write || ev.Op&fsnotify.Create == fsnotify.Create) && len(ev.Name) > len(name) { - name = ev.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 + } + } } diff --git a/hugofs/files/classifier.go b/hugofs/files/classifier.go index f0e0911ab..aab199850 100644 --- a/hugofs/files/classifier.go +++ b/hugofs/files/classifier.go @@ -69,6 +69,16 @@ func IsContentFile(filename string) bool { 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 { return htmlFileExtensionsSet[strings.TrimPrefix(filepath.Ext(filename), ".")] }