mirror of
https://github.com/gohugoio/hugo.git
synced 2026-08-24 15:28:54 +00:00
Fix panic on server atomic save edits on MacOS
An atomic save (write temp file, rename into place) unlinks the inode the watcher holds, so kqueue reports Remove for a file that's still on disk. That took the delete branch and wiped the entire taxonomy subtree; the following assemble then panicked in createMissingTaxonomies, where the shifting tree.Get hit a not yet assembled *pageMetaSource. Treat Remove of a path that still exists as an update, and use the non-shifting GetRaw when checking for the auto created taxonomy node. Fixes #15130 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -362,7 +362,7 @@ func (a *allPagesAssembler) doCreatePages(prefix string, depth int) error {
|
||||
|
||||
switch v := n.(type) {
|
||||
case contentNodeSeq, contentNodes:
|
||||
return handleContentNodeSeq(contentNodeToSeq(v))
|
||||
return handleContentNodeSeq(cnh.contentNodeToSeq(v))
|
||||
case *pageMetaSource:
|
||||
n2, err = handlePageMetaSource(v, nil, false)
|
||||
if err != nil {
|
||||
@@ -781,7 +781,7 @@ func (a *allPagesAssembler) doCreatePages(prefix string, depth int) error {
|
||||
|
||||
if _, found := nodes[p.s.siteVector]; !found {
|
||||
var rs *resourceSource
|
||||
match := cnh.findContentNodeForSiteVector(p.s.siteVector, duplicateResourceFiles, contentNodeToSeq(n))
|
||||
match := cnh.findContentNodeForSiteVector(p.s.siteVector, duplicateResourceFiles, cnh.contentNodeToSeq(n))
|
||||
if match == nil {
|
||||
return true
|
||||
}
|
||||
@@ -1385,8 +1385,11 @@ func (a *allPagesAssembler) createMissingTaxonomies() error {
|
||||
for viewName, languages := range viewLanguages {
|
||||
key := viewName.pluralTreeKey
|
||||
if a.h.isRebuild() {
|
||||
if v := tree.Get(key); v != nil {
|
||||
// Already there.
|
||||
// Note that we cannot use tree.Get here, as the tree at this point
|
||||
// may hold not yet assembled *pageMetaSource nodes.
|
||||
// We're only interested in whether the auto created (not file backed)
|
||||
// taxonomy node is still there.
|
||||
if n, found := tree.GetRaw(key); found && cnh.hasAutoContentNode(n) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user