🐛 fix(vscode): 摘修复按 Gitea PR 提交列表分组

This commit is contained in:
cruldra committed 2026-09-01 18:53:41 +08:00
1 parent c0f8da5514
commit 4d3b2a0d67
6 files changed
+193 -34

No files matched your search

+61
View File
@@ -362,6 +362,67 @@ export async function getPullRequest(opts: {
}
}
export async function listClosedPullsPage(opts: {
host: string
token: string
owner: string
repo: string
page: number
}): Promise<Array<{ number: number, title: string, merged: boolean, mergeCommitSha: string | null }>> {
const url = new URL(`${baseUrl(opts.host)}/repos/${opts.owner}/${opts.repo}/pulls`)
url.searchParams.set('state', 'closed')
url.searchParams.set('sort', 'recentupdate')
url.searchParams.set('limit', String(PAGE_SIZE))
url.searchParams.set('page', String(opts.page))
const res = await fetch(url.toString(), { headers: authHeaders(opts.token) })
await ensureOk(res)
const batch = await res.json() as Array<{
number?: unknown
title?: unknown
merged?: unknown
merge_commit_sha?: unknown
}>
if (!Array.isArray(batch))
return []
return batch.map(p => ({
number: typeof p.number === 'number' ? p.number : Number(p.number),
title: typeof p.title === 'string' ? p.title : '',
merged: p.merged === true,
mergeCommitSha: typeof p.merge_commit_sha === 'string' && p.merge_commit_sha.length > 0
? p.merge_commit_sha
: null,
}))
}
export async function listPullRequestCommitShas(opts: {
host: string
token: string
owner: string
repo: string
index: number
}): Promise<string[]> {
const out: string[] = []
let page = 1
while (true) {
const url = new URL(`${baseUrl(opts.host)}/repos/${opts.owner}/${opts.repo}/pulls/${opts.index}/commits`)
url.searchParams.set('limit', String(PAGE_SIZE))
url.searchParams.set('page', String(page))
const res = await fetch(url.toString(), { headers: authHeaders(opts.token) })
await ensureOk(res)
const batch = await res.json() as Array<{ sha?: unknown }>
if (!Array.isArray(batch) || batch.length === 0)
break
for (const c of batch) {
if (typeof c.sha === 'string' && c.sha.length > 0)
out.push(c.sha)
}
if (batch.length < PAGE_SIZE)
break
page += 1
}
return out
}
export async function getIssue(opts: {
host: string
token: string