pipeline/ — 多 pass 索引

索引管線的調度與 pass 註冊
檔案:src/pipeline/pipeline.c(2,524 行)· registry.c(1,031 行)· pipeline.h

大方向

pipeline.c 是把「一堆 source 檔」變成「一堆節點/邊」的總指揮。它管:pass 的註冊與執行順序、平行調度(pass_parallel.c 的 worker pool)、專案識別、以及最後把結果 publish 給 store。


1. Pipeline 生命週期

cbm_pipeline_new() · cbm_pipeline_run() · cbm_pipeline_free() pipeline.cpipeline 的建立、執行、釋放。

new 初始化專案狀態(project name、cache、store 關聯);run 依序跑所有註冊的 pass;free 清理。set_before_publish_hook_for_tests 這類 for_test hook 是 CBM 的可測試性設計——很多函式有測試鉤子。

cbm_pipeline_cancel() pipeline.c讓執行中的索引可被取消(daemon activation 時用)。

更新流程要求所有 process 取消時,執行中的索引透過此函式安全停止——不會留下半寫的圖。

2. Pass 註冊(registry.c)

pass 註冊表 registry.c每個 pass 一個登錄項:名稱、前置條件、執行函式。

registry.c 是 pass 的清單。pipeline 依 registry 的順序執行每個 pass,每個 pass 把節點/邊 publish 到 store。想看各 pass 細節見 passes.html

3. 平行化

pass_parallel / worker_pool pipeline/把可並行的抽取分散到多個 worker。

大 repo 的索引速度靠平行 worker 撐起來(Linux kernel 3 分鐘的秘密之一)。CBM_WORKERS 可覆寫偵測到的 worker 數。

看完這頁你應該能說出:pipeline 的 new/run/free 生命週期、pass 靠 registry 註冊與依序執行、可取消性如何支援更新流程、以及平行化如何貢獻索引速度。