Documentation
¶
Overview ¶
deepen.go 浅克隆工作副本的按需历史补全(收编自 argus internal/gitdeepen, v0.10.39)。
背景:依赖 merge-base 的 range 审查在 workcopy 的"默认分支浅克隆 + head checkout"下必挂("cannot find merge-base")。全量 `git fetch --unshallow` 把完整历史拉进关键路径,慢且重。本文件先本地探测 merge-base 可达性, 不可达再 `--deepen` 指数加深(64 起步逐轮 ×2):多数 PR 一两轮即收敛, 代价从"全仓历史"降到"base↔head 的实际距离"。
refspec 保持显式全量:clone --depth 1 隐含 --single-branch,裸 fetch 只补 默认分支的远端引用,PR base 非默认分支时 origin/<base> 不存在(真件实测 复现)。deepen 不移除 .git/shallow 标记——守卫因此从"标记存在"改为 "merge-base 可达探测",已补全的工作副本(标记可能仍在)探测通过即零开销。
Package workcopy Git 工作副本沙箱服务。 浅克隆 base 默认分支 + fetch PR head + checkout,供 cli 插件在真实工作树上执行。 凭证嵌在 clone URL 中,绝不落盘。singleflight 防并发重复 clone。 引用归零后目录**保留**(供同 PR 下次审查增量复用,省 base 分支重克隆), TTL 由 Sweep 兜底回收。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func EnsureMergeBase ¶
EnsureMergeBase 确保 origin/<baseBranch> 与 HEAD 的 merge-base 可达。
- 探测通过(完整克隆、已补全、或 base 与 head 重合等价场景)零 fetch 返回;
- 探测失败且 .git/shallow 存在 → deepen 指数加深循环(每轮后重探);
- 探测失败但非浅克隆 → 静默返回:merge-base 失败另有原因(base 分支缺失、 非 git 目录等),交由后续 OCR 执行报真实错误——与旧"无 shallow 标记即 跳过"语义一致;
- 加深轮失败/预算耗尽仍不可达 → 报错降级。整条消息过 logredact(git 传输 失败回显带凭证 clone URL——ocrshim 通道此错误经 MCP 原样回传 argus)。
func EnsureMergeBaseTLS ¶
func EnsureMergeBaseTLS(ctx context.Context, dir, baseBranch string, timeout time.Duration, insecureTLS bool) error
EnsureMergeBaseTLS EnsureMergeBase 的 TLS 形态:insecureTLS=true 时对 deepen fetch 注入 GIT_SSL_NO_VERIFY(与 Pool.runGit 同款纪律——自签 https 平台的 clone/PR fetch 均走该环境,deepen fetch 漏注会让补全在此类平台确定性失败 且静默降级丢失 range 审查;第八轮审计 C 级修复)。
Types ¶
type Pool ¶
type Pool struct {
Root string
Log logx.Logger
// CredentialOf 返回 (cloneBaseURL, token):由调用方按平台注入。
CredentialOf func(platform string) (baseURL, token string, ok bool)
// InsecureTLSOf 平台是否免 TLS 校验。
InsecureTLSOf func(platform string) bool
// contains filtered or unexported fields
}
Pool 工作副本沙箱池。
func (*Pool) Release ¶
func (p *Pool) Release(key WorktreeKey)
Release 任务结束后释放。引用归零**不再立即删目录**:保留供同 PR 下次审查 增量复用(换 head 只 fetch 新 refspec),TTL 由 Sweep 兜底回收。