From 09c2a03cefa687832257d3b816da50db3cfcc0f2 Mon Sep 17 00:00:00 2001
From: ai_xiaopei <xiaopei@aisim.cn>
Date: Sat, 25 Jul 2026 23:48:11 +0800
Subject: [PATCH] feat: 实现输出格式化

---
 internal/index/cache.go |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/internal/index/cache.go b/internal/index/cache.go
new file mode 100644
index 0000000..b54860c
--- /dev/null
+++ b/internal/index/cache.go
@@ -0,0 +1,48 @@
+package index
+
+import (
+	"os/exec"
+	"strings"
+)
+
+// GetGitCommit 获取知识库当前 git commit hash
+func GetGitCommit(vaultPath string) (string, error) {
+	cmd := exec.Command("git", "-C", vaultPath, "rev-parse", "HEAD")
+	out, err := cmd.Output()
+	if err != nil {
+		return "", err // 不是 git 仓库
+	}
+	return strings.TrimSpace(string(out)), nil
+}
+
+// NeedsRebuild 检查是否需要重建索引
+func NeedsRebuild(store *Store, vaultPath string) (bool, string, error) {
+	currentCommit, err := GetGitCommit(vaultPath)
+	if err != nil {
+		// 不是 git 仓库,总是需要重建
+		return true, "", nil
+	}
+
+	storedCommit, err := store.GetMeta("git_commit")
+	if err != nil {
+		return true, currentCommit, nil
+	}
+
+	if storedCommit == "" {
+		// 没有记录,需要重建
+		return true, currentCommit, nil
+	}
+
+	if storedCommit != currentCommit {
+		// commit 变了,需要重建
+		return true, currentCommit, nil
+	}
+
+	// 检查是否有节点
+	count, _ := store.NodeCount()
+	if count == 0 {
+		return true, currentCommit, nil
+	}
+
+	return false, currentCommit, nil
+}

--
Gitblit v1.9.1