hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 096f5e19217e985bccbf6c539e1b220541ffa6f6
parent ba35e69856900b6fc92681aa841cdcaefbb4b121
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Sun, 17 Oct 2021 16:11:00 +0200

Fix the "page picker" logic in --navigateToChanged

Fixes #9051

Diffstat:
Mcommands/hugo.go | 16+++++++++++-----
Mhugofs/files/classifier.go | 10++++++++++
2 files changed, 21 insertions(+), 5 deletions(-)
diff --git 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
@@ -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), ".")]
 }