Bitbucket のプルリクの宛先ブランチ・タイトル・説明を変える
違うブランチに向けて開いたプルリクは、却下して開き直さなくても大丈夫です。開いている間なら宛先ブランチを変えられ、タイトル・説明・レビュアーも一緒に変えられます。以下は、その場所、Bitbucket Data Center が断るとき、スクリプトで引っかかりやすいレビュアーの件です。もとにしたのは Atlassian の Create a pull request(Data Center 10.5)と、Bitbucket Cloud と Data Center の REST のリファレンスです(どれも英語)。
Web の画面で
Bitbucket Data Center では、プルリクのページで Edit を押します。開いた画面に、タイトル・説明・レビュアー・宛先ブランチがあります。新しい宛先ブランチにするには、そのブランチの Read の権限が要ります。
Bitbucket Cloud でも、プルリクの Edit から同じような画面が開きます。Atlassian の REST のリファレンスには、更新で「プルリクのブランチや説明を変えられる」こと、そして「変えられるのは開いているプルリクだけ」と書かれています。Cloud では却下したプルリクを開き直せないので、宛先を間違えただけのプルリクは、却下する前にこちらを試してください(却下と再オープン)。
Data Center が新しい宛先ブランチを断るとき
Data Center の REST のリファレンスには、宛先ブランチの変更が 409 になる場合が並んでいます。
- 同じ元のブランチから新しい宛先へのプルリクが、すでに別に開いている(作るときにも同じ答えになります)
- 元のブランチと新しい宛先ブランチが同じ
- 新しい宛先ブランチに元のブランチの変更がすべて入っていて、マージするものがない
- 宛先のリポジトリがアーカイブされている
無いブランチを指定すると 404 です。画面を開いた後にプルリクが変わっていた場合も 409 になり、「out-of-date information」と出ます(どうすればよいか)。
REST API では、レビュアーも送り返す
Cloud でも Data Center でも、プルリクの更新はそのプルリク自体への PUT です。気をつけたいのはレビュアーで、更新にレビュアーを入れないと消えることがあります。Bitbucket Server で version と新しい説明だけを送ったら、レビュアーがいなくなった、という相談が Atlassian Community にあります。Atlassian の担当者は、これは想定どおりの動きだと答えて手元でも再現し、いまのレビュアーを読んで一緒に送るよう勧めています。Cloud でも、Renovate の Bitbucket のコードは同じ理由で、更新の前に毎回プルリクを読んでいます(コードのコメントは「レビュアーが無いと、Bitbucket のプルリクの更新はレビュアーを消す」)。
なので、先にプルリクを読み、変えたい項目と一緒にいまのレビュアーを送り返します。Data Center では、いまの version も送ります。無いと 400 になります。
PUT https://bitbucket.example.com/rest/api/latest/projects/PROJ/repos/app/pull-requests/21
{"version": 3,
"title": "Retry the upload once",
"description": "Retries a failed upload once.",
"toRef": {"id": "refs/heads/release/2.4"},
"reviewers": [{"user": {"name": "a.reviewer"}}]}
PUT https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}/pullrequests/21
{"title": "Retry the upload once",
"destination": {"branch": {"name": "release/2.4"}},
"reviewers": [{"uuid": "{reviewer-uuid}"}]}
Cloud では、アカウントが無効になったレビュアーを送り返すと、400 で「reviewers: Malformed reviewers list」が返ります。JSON の書き方が悪いように読めますが、原因はそのレビュアーです。ユーザーが無効だとはっきり伝えるよう求める提案が Atlassian に出ています(BCLOUD-20266)。そのレビュアーを外して送り直してください。
IntelliJ IDEA で変える
Pull Request Inbox for Bitbucket は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud と Bitbucket Data Center で自分のレビュー待ちのプルリクを IDE のツールウィンドウに並べます。開いているプルリクの「Edit title and description」で、タイトルと説明を1つの画面で書き換えます。先にプルリクを読み直し、いまのレビュアー(Data Center では version も)を一緒に送り返すので、レビュアーは残り、長い説明も全文を直せます。有料の機能で、30日間の無料試用があります。読むのは無料のままです。宛先ブランチの変更はブラウザーで行ってください。
Bitbucket は Atlassian Pty Ltd の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:却下と再オープン · 既定のレビュアー · プルリクのテンプレート · マージの衝突 · English