web-dev-qa-db-ja.com

特定のターゲットブランチのすべてのGitHubプルリクエストをフィルタリングするにはどうすればよいですか?

多数のブランチとプルリクエストがあるGitHubリポジトリに取り組んでいます。

たとえば、次のプルリクエストがあるとします。

  • aブランチへX
  • bブランチへX
  • cブランチへY
  • dブランチへX
  • eからブランチYへ。

ブランチXを対象とするすべてのプルリクエストを見つける方法はありますか(つまりa -> Xb -> Xd -> X)?

35
AVIDeveloper

はい、できます。

Githubの用語では、「分岐する」は「ベース」なので、検索フレーズは次のとおりです:is:open is:pr base:X

公式説明: ブランチ名に基づいて検索

オプションで、is:mergedまたはis:unmergedフィルターも追加できます。

47
Andor Dávid

2016-01-10現在、これはgh検索バーAPIに追加されています。次の回答を参照してください。

元の承認済み(現在は期限切れの回答)は編集せずに残しました。


現在、Webインターフェイス経由では利用できません

GitHubは現在、Webインターフェースを介してターゲットブランチによってプルリクエストをフィルタリングする方法を提供していません。代わりに、現在取得しているのは、トピックブランチの名前を含むプルリクエストのリスト全体です。

GitHub Pull-Request UI

プルリクエストをクリックするとターゲットブランチが表示されますが、これは実際に必要なフィルタリングを行うのに役立ちません。

代わりにGitHub REST APIを使用できます

GitHub REST API を使用して、プルリクエストをフィルタリングできますが、

GET /repos/:owner/:repo/pulls?base=:branch

これにより、:owner/:repoをベースブランチとしてターゲットとするリクエストによってフィルタリングされた、リポジトリ:branchのすべてのオープンプルリクエストが表示されます。ドキュメントから:

ベースブランチ名でプルをフィルターします。例:gh-pages

CURLの使用例

curlが利用可能な場合は、コマンドラインからパブリックリポジトリでこれをテストできます。

curl https://api.github.com/repos/codecombat/codecombat/pulls?base=master > \
pulls.json

次の形式のJSON応答が返されます。

[
  {
    "url": "https://api.github.com/repos/codecombat/codecombat/pulls/879",
    "id": 14955421,
    "html_url": "https://github.com/codecombat/codecombat/pull/879",
    "head": {
      "label": "DanielRodriguezRivero:patch-4",
      "ref": "patch-4",
      "sha": "baff84f0aeee12f23e3608558ae5341a0b5f939b",
      "repo": {
        "id": 16202384,
        "name": "codecombat",
        "full_name": "DanielRodriguezRivero/codecombat"
      }
    },
    "base": {
      "label": "codecombat:master",
      "ref": "master",
      "sha": "5e2f3ac7cb731a6e40e81737a5122c7fe1b746d3",
      "repo": {
        "id": 15193430,
        "name": "codecombat",
        "full_name": "codecombat/codecombat"
      }
    }
  }
]

配列内の各オブジェクトは、ベース/ターゲットブランチによってフィルタリングされたプルリクエストです。 JSONには実際にはこれよりもはるかに多くの情報が含まれています。この質問に関連する部分を示すために、JSONのほとんどを削除しました。

CURL応答の解析

おそらくPython/Ruby/PHP/Whateverスクリプトを作成して、各プルリクエストのhtml_urlプロパティを解析し、コマンドラインにリストすることができます。たとえば、次の簡単なRubyスクリプトは、curl出力から保存されたJSON応答の出力を解析します。

require 'json'

json = JSON.parse(File.read('./pulls.json'))
pulls = json.map { |pull| { title: pull['title'], url: pull['html_url'] } }

pulls.each do |pull|
  puts pull.values
  puts
end

以下を出力します:

$ Ruby parser.rb
Update es-ES.coffee
https://github.com/codecombat/codecombat/pull/879

Fix deltas referring to last system saved
https://github.com/codecombat/codecombat/pull/874

Refactor getNameById and add naming to systems in deltas
https://github.com/codecombat/codecombat/pull/866

Traducido varios textos del fichero es-ES.coffe al espa├▒ol de Espa├▒a
https://github.com/codecombat/codecombat/pull/865

Anon name collide
https://github.com/codecombat/codecombat/pull/834
12
user456814