♻️ refactor(vscode): 代码托管仓库抽成统一接口,Gitea 实现搬到 provider 后面,翻页改看 Link 头
This commit is contained in:
1 parent
c90d84d7f2
commit
14bee9f505
64 files changed
+1881
-2718
No files matched your search
@@ -1,12 +1,13 @@
|
||||
import type { Disposable, Event, ExtensionContext, QuickPickItem, TreeView, WorkspaceFolder } from 'vscode'
|
||||
import type { PrFileDto } from '../../gitea/api'
|
||||
import type { RepoContext } from '../../gitea/repoContext'
|
||||
import type { Issue } from '../../gitea/types'
|
||||
import type { ForgeContext } from '../../forge/context'
|
||||
import type { ForgePrFile } from '../../forge/types'
|
||||
import type { Issue } from '../../issues/types'
|
||||
import type { DiffBase, DiffBaseSource } from '../diff/diffBase'
|
||||
import type { FileTreeProvider, TreeNode } from '../explorer/fileTree'
|
||||
import type { FileCount } from './pickList'
|
||||
import * as path from 'node:path'
|
||||
import { commands, EventEmitter, QuickPickItemKind, Uri, window, workspace } from 'vscode'
|
||||
import { requireForge } from '../../forge/context'
|
||||
import { fileAtRef } from '../../git/fileAt'
|
||||
import { logger } from '../../logging/logger'
|
||||
import { WORKSPACE_TREE } from '../explorer/fileTree'
|
||||
@@ -17,7 +18,7 @@ import { ChangeDecorations } from './changeDecorations'
|
||||
import { changeOf, reviewBaseFile, reviewTree } from './changedFiles'
|
||||
import { countingFiles, pickEntries, pickItemText, pickRows, withFileCount } from './pickList'
|
||||
import { columnLabel, REVIEW_COLUMNS_TEXT, reviewableIssue, reviewablePullRequest, reviewBaseLabel, reviewBaseMissing, reviewDescription, reviewMessage } from './reviewRules'
|
||||
import { loadIssue, loadPullRequest, loadPullRequestFiles, requireRepo, reviewCandidateIssues } from './reviewSource'
|
||||
import { loadIssue, loadPullRequest, reviewCandidateIssues } from './reviewSource'
|
||||
import { localWorktree, prepareWorktree } from './reviewWorktree'
|
||||
|
||||
/** workspaceState:正在审查的工单号,重开窗口接着审查。 */
|
||||
@@ -35,12 +36,12 @@ type How = 'pick' | 'reload' | 'restore'
|
||||
|
||||
/**
|
||||
* 进审查要的东西都备好了:工单、它的 PR、PR 改过的文件、装着 PR 最新代码的工作副本,
|
||||
* 和预览对比的基准:PR 的目标分支名、目标分支与 PR 头的合并基(Gitea 没给时退回目标分支的提交,同看板「改动」tab)。
|
||||
* 和预览对比的基准:PR 的目标分支名、目标分支与 PR 头的合并基(取不到时退回目标分支的提交,同看板「改动」tab)。
|
||||
*/
|
||||
interface Loaded {
|
||||
issue: Issue
|
||||
pr: number
|
||||
files: PrFileDto[]
|
||||
files: ForgePrFile[]
|
||||
worktree: string
|
||||
base: { ref: string, commit: string }
|
||||
}
|
||||
@@ -115,12 +116,12 @@ export class ReviewMode implements DiffBaseSource, Disposable {
|
||||
})
|
||||
picker.show()
|
||||
|
||||
let repo: RepoContext
|
||||
let repo: ForgeContext
|
||||
try {
|
||||
repo = await requireRepo(this.context)
|
||||
repo = await requireForge(this.context)
|
||||
}
|
||||
catch (err) {
|
||||
logger.add({ level: 'error', source: 'codeReader', message: '选工单:读不到当前工作区的 Gitea 仓库', details: errorText(err) })
|
||||
logger.add({ level: 'error', source: 'codeReader', message: '选工单:读不到当前工作区的代码托管仓库', details: errorText(err) })
|
||||
picker.hide()
|
||||
void window.showErrorMessage(`没法选工单:${errorText(err)}`)
|
||||
return
|
||||
@@ -228,9 +229,9 @@ export class ReviewMode implements DiffBaseSource, Disposable {
|
||||
|
||||
/** 弹框里的一项:有 PR 的工单去读 PR 改了几个文件(各项一起读),读不到就写读不到。 */
|
||||
/** 读一张工单的 PR 改了几个文件;没读到记进日志,这一项写读不到。 */
|
||||
private async countFiles(repo: RepoContext, issueNumber: number, pr: number): Promise<FileCount> {
|
||||
private async countFiles(repo: ForgeContext, issueNumber: number, pr: number): Promise<FileCount> {
|
||||
try {
|
||||
return { count: (await loadPullRequestFiles(repo, pr)).length }
|
||||
return { count: (await repo.provider.listPullRequestFiles(pr)).length }
|
||||
}
|
||||
catch (err) {
|
||||
logger.add({ level: 'warn', source: 'codeReader', message: `选工单:读不到 #${issueNumber} 的 PR #${pr} 改了几个文件`, details: errorText(err) })
|
||||
@@ -281,7 +282,7 @@ export class ReviewMode implements DiffBaseSource, Disposable {
|
||||
}
|
||||
|
||||
private async load(issueNumber: number, step: (text: string) => void): Promise<Loaded | { blocked: string }> {
|
||||
const repo = await requireRepo(this.context)
|
||||
const repo = await requireForge(this.context)
|
||||
step(`正在读取 #${issueNumber}…`)
|
||||
const reviewable = reviewableIssue(issueNumber, await loadIssue(this.context, repo, issueNumber))
|
||||
if ('blocked' in reviewable)
|
||||
@@ -291,10 +292,11 @@ export class ReviewMode implements DiffBaseSource, Disposable {
|
||||
const reviewablePull = reviewablePullRequest(pr, await loadPullRequest(repo, pr))
|
||||
if ('blocked' in reviewablePull)
|
||||
return reviewablePull
|
||||
const files = await loadPullRequestFiles(repo, pr)
|
||||
const { headSha, baseRef, mergeBase, baseSha } = reviewablePull.pull
|
||||
const files = await repo.provider.listPullRequestFiles(pr)
|
||||
const { headSha, baseRef } = reviewablePull.pull
|
||||
const baseCommit = await repo.provider.pullRequestDiffBase(reviewablePull.pull)
|
||||
const worktree = await prepareWorktree(this.context, repo, issue, { number: pr, headSha }, step)
|
||||
return { issue, pr, files, worktree, base: { ref: baseRef, commit: mergeBase || baseSha } }
|
||||
return { issue, pr, files, worktree, base: { ref: baseRef, commit: baseCommit } }
|
||||
}
|
||||
|
||||
private async show(loaded: Loaded): Promise<void> {
|
||||
|
||||
Reference in new issue
Block a user