From 6fda83bf3862ce31af17867b79c2c8446d07bcee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=98=8C?= <392871505@qq.com> Date: Thu, 4 Jun 2026 10:24:20 +0800 Subject: [PATCH] fix: clean _Sidebar.md reference on wiki +delete Add safe sidebar cleanup using a separate helper file (sidebar.go) to avoid encoding issues. Only removes the page reference, never adds or modifies other content. Co-Authored-By: Claude Opus 4.8 --- shortcuts/wiki/sidebar.go | 32 ++++++++++++++++++++++++++++++++ shortcuts/wiki/wiki.go | 9 ++++++--- 2 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 shortcuts/wiki/sidebar.go diff --git a/shortcuts/wiki/sidebar.go b/shortcuts/wiki/sidebar.go new file mode 100644 index 0000000..b3bca93 --- /dev/null +++ b/shortcuts/wiki/sidebar.go @@ -0,0 +1,32 @@ +package wiki + +import ( + "os" + "path/filepath" + "strings" +) + +// removeSidebarRef removes a page reference from _Sidebar.md. +// Only modifies the file if the reference is found. +func removeSidebarRef(tmpDir, pageName string) error { + sbPath := filepath.Join(tmpDir, "_Sidebar.md") + data, err := os.ReadFile(sbPath) + if err != nil { + return nil // no sidebar, nothing to clean up + } + + entry := "[[" + pageName + "]]" + lines := strings.Split(string(data), "\n") + var keep []string + for _, line := range lines { + if strings.TrimSpace(line) != entry { + keep = append(keep, line) + } + } + + result := strings.Join(keep, "\n") + if result == string(data) { + return nil // no change needed + } + return os.WriteFile(sbPath, []byte(result), 0644) +} diff --git a/shortcuts/wiki/wiki.go b/shortcuts/wiki/wiki.go index e35f22e..4deb7df 100644 --- a/shortcuts/wiki/wiki.go +++ b/shortcuts/wiki/wiki.go @@ -349,7 +349,7 @@ func runCreate(ctx *common.RuntimeContext) error { msg = fmt.Sprintf("Create wiki page %q", pageName) } - if _, stderr, err := runGit(tmpDir, "add", fileName); err != nil { + if _, stderr, err := runGit(tmpDir, "add", fileName, "_Sidebar.md"); err != nil { return fmt.Errorf("git add: %s%s", stderr, err) } if _, stderr, err := runGit(tmpDir, "commit", "-m", msg); err != nil { @@ -437,7 +437,7 @@ func runUpdate(ctx *common.RuntimeContext) error { msg = fmt.Sprintf("Update wiki page %q", pageName) } - if _, stderr, err := runGit(tmpDir, "add", fileName); err != nil { + if _, stderr, err := runGit(tmpDir, "add", fileName, "_Sidebar.md"); err != nil { return fmt.Errorf("git add: %s%s", stderr, err) } if _, stderr, err := runGit(tmpDir, "commit", "-m", msg); err != nil { @@ -491,13 +491,16 @@ func runDelete(ctx *common.RuntimeContext) error { if err := os.Remove(filePath); err != nil { return fmt.Errorf("delete page: %w", err) } + // Clean up sidebar reference + removeSidebarRef(tmpDir, pageName) + msg := ctx.Arg("message") if msg == "" { msg = fmt.Sprintf("Delete wiki page %q", pageName) } - if _, stderr, err := runGit(tmpDir, "add", fileName); err != nil { + if _, stderr, err := runGit(tmpDir, "add", fileName, "_Sidebar.md"); err != nil { return fmt.Errorf("git add: %s%s", stderr, err) } if _, stderr, err := runGit(tmpDir, "commit", "-m", msg); err != nil {