Forgejo・Gitea:プルリクの変更ファイル
Forgejo と Gitea は、プルリクが変えたファイルを GET /repos/持ち主/リポジトリ名/pulls/番号/files でページに分けて返します。比べるのはマージベースから、プルリク自身の先頭(refs/pull/番号/head)までです。どちらも大きなプルリクを断らず、すべてのファイルをページごとに返します。以下は、2026年10月25日に codeberg.org(Forgejo)と gitea.com(Gitea)が返した答えと、その裏にあるサーバーのソースです。
HTTP/1.1 404 Not Found
{"message":"The target couldn't be found.","url":"https://codeberg.org/api/swagger","errors":[]}
404
The target couldn't be found.(Forgejo)・not found(Gitea):リポジトリにその番号のプルリクが無いか、リポジトリが無いか、トークンから見えません(404「The target couldn't be found.」「not found」へ)。
ページと、1ページに入るもの
- 1ページ最大50件:
limitはサーバーの上限で止まり、既定は50(MAX_RESPONSE_ITEMS)です。どちらのサーバーも、100を頼むと50ずつでした。X-Total-Countがファイルの数、X-HasMoreが次のページがあるか、Linkがその住所を示します。最後より先のページは 200 で空の一覧です。 skip-to=ファイルは、そのファイルから一覧を始めます。Forgejo は数もそこから数えます(codeberg.org で、52ファイルのプルリクを11番目のファイルから頼むと42でした)。Gitea のソースでは、X-Total-Countはプルリク全体の数のままです。- 一覧にパッチは無い:ファイルごとに
filename・status・additions・deletions・changesとファイルの住所(html_url・contents_url・raw_url)があり、名前を変えたファイルにはprevious_filenameが付きます。プルリク全体の差分は、GET /repos/持ち主/リポジトリ名/pulls/番号.diffから文字で来ます。 - ページの作り方:サーバーのソースでは、Gitea はページごとに全ファイルの差分を作ってから1ページ分を渡し、Forgejo は先にファイルの名前の一覧を取って、そのページのファイルの差分だけを作ります。とても大きなプルリクでは、Gitea はページごとに重くなります。
200 なのに changed_files が一覧と合わないとき
- 開いているプルリクは合います(codeberg.org:
changed_files52、一覧も52ファイル)。マージ済みはずっと離れることがあります:codeberg.org のマージ済みのプルリク2つは、changed_filesが1237と5537で、一覧は56と8ファイルでした。 - 理由(Forgejo のソース):
changed_filesは、保存したマージベースから、head のブランチの今の先頭まで(ブランチが残っている間)で数えます。一覧はプルリク自身の先頭までで比べます。マージの後も動いた head のブランチは、その後に push したものまで数えられます。
直し方
- 全ページを読む:
limit=50でLinkかX-HasMoreをたどる。 - ファイルの数:マージ済みのプルリクの
changed_filesでなく、一覧のX-Total-Countを使う。 - すべての行:
GET /repos/持ち主/リポジトリ名/pulls/番号.diff、または手元でgit fetch origin refs/pull/番号/headのあとgit diff origin/ベースのブランチ...FETCH_HEAD。
IntelliJ IDEA で Forgejo・Gitea のプルリクを見るなら
Lesstep の Pull Request Inbox for Forgejo and Gitea は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクの変更ファイルはこの一覧から50件ずつ、1,000ファイルまで読みます。ファイルはそれぞれ IDE の差分で開き、マージベースと先頭のコミットでファイル全体を読みます。1.0.20 からは、変更ファイルが1,000を超えるプルリクでは、既読の数のところで、先頭のファイルだけを表示していて残りは git diff で見えると言います(前は何も言わずに一覧が終わっていました)。読むのは無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
このページは Forgejo プロジェクト・Codeberg e.V.・Gitea プロジェクト・JetBrains のいずれとも提携しておらず、推奨・承認も受けていません。Forgejo・Gitea・Codeberg はそれぞれの持ち主の名前、IntelliJ IDEA は JetBrains s.r.o. の商標です。
ほかに:404「The target couldn't be found.」「not found」 · 401「token is required」と知らないトークン · 「token does not have at least one of required scope(s)」 · Forgejo・Gitea の検索の断り(400・422) · Forgejo・Gitea のマージの断り(405・409) · チェックが合格したらマージの断り · Forgejo・Gitea のレビューの断り(422) · Forgejo・Gitea のブランチの更新の断り(403・409・422) · Forgejo・Gitea のプルリクが作れない(409・422・403) · Forgejo・Gitea のコメントの断り(403・422・400) · JetBrains の IDE で Forgejo・Gitea のプルリクを扱う · English