2015-10-20 5 views
6

現在、GitHub API v3を使用している小さなプロジェクトを作成しています。GitHub API - すべてのブランチを一覧表示せずにレポのブランチ数を取得する

私は、レポに含まれるブランチの数に基づいて計算を続けています。私はlist all the branches of that repoにも要求せずにそうする方法を見つけることができないようです。リポジトリのブランチを要求する必要があるため、特に何十ものブランチを含む何百ものリポジトリを処理する場合、不必要な実行時間が増えます。

そうする能力の見かけの欠如は、組織のレポの数を取得し、非常によく似操作するので、小さな驚きによって私をつかまえ、そうすることによって、容易に入手可能である:

  1. Get an organization。例えばGET https://api.github.com/orgs/cloudify-cosmo、適切なGitHub authentication credentialsを使用してください。
  2. ちょうどこれら二つのフィールドの値を追加し、レスポンスボディにレポの数を取得するにはpublic_repostotal_private_repos
  3. という名前の2つのフィールドがある、認証が成功したと仮定。

何か不足していますか?ブランチの一覧を表示することなく、レポのブランチの数を取得するのと同様に便利な方法(または何らかの方法)がありますか?

+0

'GET /レポ/::所有者/:レポ/ branches'は配列を返し、あなたはちょうどそれの長さを使用することはできません?これらのすべてのための分岐数を取得するequest – jready

+0

私はそれを行うことができます、しかし、私が指定したように、私はそのレポのすべての枝をリストする必要があります。私は、GET/orgs /:orgのフィールドだけを使ってリポジトリの番号を取得するのと同じように、exrtaの情報を要求することなく、ブランチの数を取得したいと思います。例えば'GET/orgs /:org/repos' – aviyoop

答えて

6

現在、このような属性はありません。

ただし、すべてのページを取得しないようにするために使用できる素敵なトリックがあります。一つだけで、

https://developer.github.com/v3/#pagination

ので:あなたは1per_pageを設定すると、各ページには、あなたの項目の合計数を教えてくれる1つの項目と(最後のページで明らかにした)ページ数が含まれていますリクエスト - あなたはブランチの総数を得ることができます。たとえば、あなたはこのURLを取得し、リンク・ヘッダを検査した場合:

https://api.github.com/repos/github/linguist/branches?per_page=1 

あなたはLinkヘッダがあることがわかります:

Link: <https://api.github.com/repositories/1725199/branches?per_page=1&page=2>; rel="next", <https://api.github.com/repositories/1725199/branches?per_page=1&page=28>; rel="last" 

これは、結果の28ページがあることを示しています、 1ページに1つのアイテムがあるため、ブランチの総数は28です。

これが役に立ちます。あなたはまた、分岐を簡単にカウントを取得するためにGraphQL API v4を使用することができます

0

{ 
    repository(owner: "google", name: "gson") { 
    refs(first: 0, refPrefix: "refs/heads/") { 
     totalCount 
    } 
    } 
} 

Try it in the explorer

与える:

{ 
    "data": { 
    "repository": { 
     "refs": { 
     "totalCount": 13 
     } 
    } 
    } 
} 

を使用すると、複数のレポにこれをやっていると、それはまた、より簡単ですGraphQLを使用すると、別のaliasesリポジトリごとにクエリを作成することができます& 1つだけを使用r

{ 
    fetch: repository(owner: "github", name: "fetch") { 
    ...RepoFragment 
    } 
    hub: repository(owner: "github", name: "hub") { 
    ...RepoFragment 
    } 
    scientist: repository(owner: "github", name: "scientist") { 
    ...RepoFragment 
    } 
} 

fragment RepoFragment on Repository { 
    refs(first: 0, refPrefix: "refs/heads/") { 
    totalCount 
    } 
} 

Try it in the explorer

関連する問題