✨ feat(vscode): 审查列可以手动标记为通过
This commit is contained in:
1 parent
20249d6a08
commit
4094ffa49e
12 files changed
+157
-6
No files matched your search
@@ -598,6 +598,10 @@ export class KanbanWebviewPanel {
|
||||
void issues.handleUpdateAutoReview(this, msg.issueNumber, msg.value)
|
||||
return
|
||||
}
|
||||
if (msg.type === 'issue/update-review-passed') {
|
||||
void issues.handleUpdateReviewPassed(this, msg.issueNumber, msg.value)
|
||||
return
|
||||
}
|
||||
if (msg.type === 'issue/update-profile-path') {
|
||||
void issues.handleUpdateProfilePath(this, msg.issueNumber, msg.profilePath)
|
||||
return
|
||||
|
||||
@@ -1893,6 +1893,85 @@ export async function handleUpdateAutoReview(panel: KanbanWebviewPanel, issueNum
|
||||
}
|
||||
}
|
||||
|
||||
export async function handleUpdateReviewPassed(panel: KanbanWebviewPanel, issueNumber: number, value: boolean): Promise<void> {
|
||||
const workspaceRoot = workspace.workspaceFolders?.[0]?.uri.fsPath
|
||||
if (!workspaceRoot) {
|
||||
panel.postMessage({
|
||||
type: 'toast/show',
|
||||
id: makeNonce(),
|
||||
level: 'error',
|
||||
message: '请先打开一个工作区文件夹',
|
||||
dismissOnTimer: 5000,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
const remote = await detectRepo(workspaceRoot)
|
||||
if (!remote) {
|
||||
panel.postMessage({
|
||||
type: 'toast/show',
|
||||
id: makeNonce(),
|
||||
level: 'error',
|
||||
message: '当前工作区没有 Gitea 远程仓库',
|
||||
dismissOnTimer: 5000,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
const token = await getToken(panel.context, remote.host)
|
||||
if (!token) {
|
||||
panel.postMessage({
|
||||
type: 'toast/show',
|
||||
id: makeNonce(),
|
||||
level: 'error',
|
||||
message: '请先完成 Gitea 配置',
|
||||
dismissOnTimer: 5000,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
let previousValue: boolean | undefined
|
||||
try {
|
||||
const existingState = await panel.readIssueState(issueNumber)
|
||||
previousValue = typeof existingState.reviewPassed === 'boolean'
|
||||
? existingState.reviewPassed
|
||||
: undefined
|
||||
}
|
||||
catch {
|
||||
previousValue = undefined
|
||||
}
|
||||
|
||||
try {
|
||||
await panel.mergeIssueState(issueNumber, { reviewPassed: value })
|
||||
logger.add({
|
||||
level: 'info',
|
||||
source: 'panel',
|
||||
message: `工单 #${issueNumber} reviewPassed=${value} 已持久化`,
|
||||
})
|
||||
}
|
||||
catch (err) {
|
||||
const message = err instanceof Error ? err.message : String(err)
|
||||
logger.add({
|
||||
level: 'error',
|
||||
source: 'panel',
|
||||
message: `持久化 reviewPassed 失败 (issue #${issueNumber})`,
|
||||
details: message,
|
||||
})
|
||||
panel.postMessage({
|
||||
type: 'toast/show',
|
||||
id: makeNonce(),
|
||||
level: 'error',
|
||||
message: `保存工单 #${issueNumber} 审查通过标记失败: ${message}`,
|
||||
dismissOnTimer: 6000,
|
||||
})
|
||||
panel.postMessage({
|
||||
type: 'issue/patch',
|
||||
issueNumber,
|
||||
patch: { reviewPassed: previousValue },
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Persist a per-issue `profilePath` override into the issue's state JSON
|
||||
* comment. Implement / implement-resume sessions use this profile
|
||||
|
||||
@@ -228,6 +228,7 @@ export type WebviewToExtension
|
||||
| { type: 'dependency/set', issueNumber: number, prerequisiteNumber: number }
|
||||
| { type: 'dependency/clear', issueNumber: number, prerequisiteNumber: number }
|
||||
| { type: 'issue/update-auto-review', issueNumber: number, value: boolean }
|
||||
| { type: 'issue/update-review-passed', issueNumber: number, value: boolean }
|
||||
| { type: 'issue/update-profile-path', issueNumber: number, profilePath: string }
|
||||
| { type: 'issue/update-brainstorm-profile-path', issueNumber: number, brainstormProfilePath: string }
|
||||
| { type: 'issue/clear-session', issueNumber: number, kind: 'brainstorm' | 'implement' | 'review' | 'test' | 'prototype' }
|
||||
|
||||
@@ -8,6 +8,7 @@ describe('isOwnerOnlyMessage', () => {
|
||||
expect(isOwnerOnlyMessage('issue/close')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('dependency/set')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('issue/update-auto-review')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('issue/update-review-passed')).toBe(true)
|
||||
expect(isOwnerOnlyMessage('issue/clear-session')).toBe(true)
|
||||
})
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ export const OWNER_ONLY_MESSAGE_TYPES: ReadonlySet<string> = new Set([
|
||||
'issue/close',
|
||||
'issue/generate-pr-diff-summary',
|
||||
'issue/update-auto-review',
|
||||
'issue/update-review-passed',
|
||||
'issue/update-profile-path',
|
||||
'issue/update-brainstorm-profile-path',
|
||||
'issue/clear-session',
|
||||
|
||||
Reference in new issue
Block a user