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), ".")] }