## 现状问题 `internal/runtime/git_isolation.go` 的 `gitIndexLockHeldUnder`(约 57 行)在同一个函数里做了三件事:校验锁文件、遍历 `/proc` 下每个进程、再逐个读取该进程 `fd` 目录里的符号链接判断是否指向锁文件。最内层「扫描单个进程 fd 目录」嵌在两层循环里,和「读不到 fd 目录时是否记为不确定」的判定交织在一起,阅读和单测都不方便(现有测试只能借助真实 `/proc` 或伪造整棵进程树间接覆盖)。 ## 重构方案 - 新增 `fdDirHoldsFile(dir, want string, lock os.FileInfo) (bool, error)`:读取一个进程的 fd 目录,按路径(`target == want`)或 inode(`os.SameFile`)判断是否有描述符指向锁文件;返回的 error 仅表示 fd 目录本身读取失败。 - `gitIndexLockHeldUnder` 改为调用它:读取失败时沿用原有「外部属主 + 非 NotExist + 进程可能属于锁属主 → uncertain」判定,命中则 `return true, true, nil`。 - 跳过 socket/pipe/匿名 inode(非 `/` 开头)的规则、注释和判定顺序逐字保持不变。 ## 影响范围 仅 `internal/runtime/git_isolation.go` 内部私有函数,不改导出接口、不改行为;新增一个测试文件。 ## 验证方式 - 新增 `TestFdDirHoldsFile`:覆盖空目录、pipe/socket/anon_inode、指向其他文件、悬空链接、同路径命中、硬链接同 inode 命中、fd 目录不存在返回 NotExist。 - 现有 `TestGitIndexLock*` / `TestRestoreProjectAgentGitIndex*` 继续通过。 - `go vet ./internal/runtime/`、`go test ./internal/runtime/`。
Activity
【架构优化】从 gitIndexLockHeldUnder 中拆出单进程 fd 目录扫描 fdDirHoldsFile