From c806fa6cd122d56b033ab375935d6471c1fd33ac Mon Sep 17 00:00:00 2001 From: engalar Date: Wed, 1 Apr 2026 21:54:37 +0800 Subject: [PATCH] fix: CREATE OR REPLACE PAGE reuses existing UUID When a page already exists, UpdatePage now preserves the original UUID instead of generating a new one, avoiding git delete+add churn. Co-Authored-By: Claude Opus 4.6 (1M context) --- mdl/executor/cmd_pages_create_v3.go | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/mdl/executor/cmd_pages_create_v3.go b/mdl/executor/cmd_pages_create_v3.go index 58f07f2..119e683 100644 --- a/mdl/executor/cmd_pages_create_v3.go +++ b/mdl/executor/cmd_pages_create_v3.go @@ -59,16 +59,23 @@ func (e *Executor) execCreatePageV3(s *ast.CreatePageStmtV3) error { return fmt.Errorf("failed to build page: %w", err) } - // Delete old pages only after successful build - for _, id := range pagesToDelete { - if err := e.writer.DeletePage(id); err != nil { - return fmt.Errorf("failed to delete existing page: %w", err) + // Replace or create the page in the MPR + if len(pagesToDelete) > 0 { + // Reuse first existing page's UUID to avoid git delete+add (which crashes Studio Pro RevStatusCache) + page.ID = pagesToDelete[0] + if err := e.writer.UpdatePage(page); err != nil { + return fmt.Errorf("failed to update page: %w", err) + } + // Delete any additional duplicates + for _, id := range pagesToDelete[1:] { + if err := e.writer.DeletePage(id); err != nil { + return fmt.Errorf("failed to delete duplicate page: %w", err) + } + } + } else { + if err := e.writer.CreatePage(page); err != nil { + return fmt.Errorf("failed to create page: %w", err) } - } - - // Create the page in the MPR - if err := e.writer.CreatePage(page); err != nil { - return fmt.Errorf("failed to create page: %w", err) } // Track the created page so it can be resolved by subsequent page references