Files
superwork/vscode/src/panel/issueLock.ts
T
cruldra 70b826123c ⚡ perf(vscode): 开会话去掉多余远程往返,spinner 跟随真实进度
开会话原先要先全量拉工单(含每张工单的评论、依赖、PR)做前置锁检查,
再各读一次 state JSON 给 pre-create 钩子和终端图标,几秒后才 createTerminal。

- 锁检查改用主进程已算好的工单快照,快照里没有该工单才回落全量拉取
- state JSON 一次读两处用,且提前发起与本地准备重叠
- 会话行 spinner 由扩展的 session/tab-settled 消息驱动,不再是固定 1.5s 假动画,
  消息丢失时 60s 超时兜底

Claude-Session: https://claude.ai/code/session_01Kgmb1LvrPmFX3NoUDB4zZC
2026-09-13 10:14:48 +08:00

26 lines
816 B
TypeScript

import type { Issue } from '../gitea/types'
export interface LockedReason {
locked: boolean
prerequisiteNumber?: number
prerequisiteColumn?: string
}
/**
* 纯判定:工单被未完成的前置挡住才算锁定。快照里找不到工单或前置一律放行,
* 与 webview 的 `isIssueLocked` 保持同一语义。
*/
export function evaluateLockedReason(issues: Issue[], issueNumber: number): LockedReason {
const issue = issues.find(i => i.number === issueNumber)
if (!issue || issue.prerequisite === undefined)
return { locked: false }
const prereq = issues.find(i => i.number === issue.prerequisite)
if (!prereq || prereq.column === 'done')
return { locked: false }
return {
locked: true,
prerequisiteNumber: prereq.number,
prerequisiteColumn: prereq.column,
}
}