✨ feat(vscode): 「改动」tab 重做为整 PR 聚合的主从式内联 diff(git-diff-view)
- 左树右 diff:左栏全 PR 文件树 + 统计条(共改 N · +X−Y · 已查看 M/N),右栏选中单文件内联 diff - 用 @git-diff-view/react 只渲染当前选中文件,绕开上万行全量渲染的性能坑 - gitea 新增 listPullRequestFiles、getPullRequest 取 merge_base/head,按需回两版原文 - diff 走 merge_base→head 三点口径(与 Gitea 网页一致),getRawFile 404 兜底成全增/全删/改名 - 已查看态按 head sha 落盘、新 push 自然重置;去掉提交列表、原生 diff 与 spx-gitea 虚拟文档 provider
This commit is contained in:
1 parent
ceea62ed16
commit
fb505d59c5
18 files changed
+1149
-1127
No files matched your search
@@ -2,9 +2,10 @@
|
||||
* Workspace 级「PR 审查已确认文件」持久化。
|
||||
*
|
||||
* 落盘到 `<workspace>/.spx/pr-review-confirmed.json`,形状
|
||||
* `Record<string, string[]>`:key = `${issueNumber}:${sha}`,value = 该提交里
|
||||
* 已确认(已审阅)的文件完整路径数组。目录不单独记录——目录是否确认靠「其下
|
||||
* 可见文件是否全已确认」推导。文件不存在或解析失败时按空处理。
|
||||
* `Record<string, string[]>`:key = `${issueNumber}:${sha}`(sha 取 PR 的 head
|
||||
* sha,故新 push 换 key、已查看进度自然重置),value = 该 PR 里已确认(已审阅)
|
||||
* 的文件完整路径数组。目录不单独记录——目录是否确认靠「其下可见文件是否全已
|
||||
* 确认」推导。文件不存在或解析失败时按空处理。
|
||||
*/
|
||||
|
||||
import { promises as fsp } from 'node:fs'
|
||||
@@ -79,36 +80,3 @@ export async function writeConfirmed(
|
||||
await fsp.mkdir(dir, { recursive: true })
|
||||
await fsp.writeFile(confirmedFile(workspaceRoot), `${JSON.stringify(map, null, 2)}\n`, 'utf8')
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取某工单已确认(已审阅)的提交 sha 数组。key = `${issueNumber}:commits`
|
||||
* (`commits` 非合法 sha,不与文件确认的 `${issueNumber}:${sha}` key 冲突)。
|
||||
* 文件缺失、解析失败或无该 key 时返回 `[]`。
|
||||
*/
|
||||
export async function readConfirmedCommits(
|
||||
workspaceRoot: string,
|
||||
issueNumber: number,
|
||||
): Promise<string[]> {
|
||||
const map = await readMap(workspaceRoot)
|
||||
return map[`${issueNumber}:commits`] ?? []
|
||||
}
|
||||
|
||||
/**
|
||||
* 写入某工单已确认的提交 sha 数组。空数组则删除该 key;非空则设值。父目录不存在
|
||||
* 会自动创建。
|
||||
*/
|
||||
export async function writeConfirmedCommits(
|
||||
workspaceRoot: string,
|
||||
issueNumber: number,
|
||||
shas: string[],
|
||||
): Promise<void> {
|
||||
const map = await readMap(workspaceRoot)
|
||||
const key = `${issueNumber}:commits`
|
||||
if (shas.length > 0)
|
||||
map[key] = shas
|
||||
else
|
||||
delete map[key]
|
||||
const dir = path.join(workspaceRoot, '.spx')
|
||||
await fsp.mkdir(dir, { recursive: true })
|
||||
await fsp.writeFile(confirmedFile(workspaceRoot), `${JSON.stringify(map, null, 2)}\n`, 'utf8')
|
||||
}
|
||||
Reference in new issue
Block a user