2015-10-20 4 views
6

Ich schreibe gerade ein kleines Projekt mit der GitHub API v3.GitHub API - Holen Sie sich die Anzahl der Filialen eines Repo ohne Auflistung aller Filialen

Ich mache ständig eine Berechnung basierend auf der Anzahl der Filialen ein Repo enthält. Ich kann keinen Weg finden, dies zu tun, ohne auch list all the branches of that repo anzufragen. Die Notwendigkeit, Repo-Zweigstellen anzufordern, führt zu unnötiger Laufzeit, insbesondere wenn es sich um Hunderte von Repos handelt, die jeweils Dutzende von Filialen enthalten.

Der offensichtliche Mangel an Fähigkeit, durch eine kleine Überraschung so fing mich zu tun, da eine ziemlich ähnliche Operation, die Anzahl der repos einer Organisation bekommen ist, indem so leicht verfügbar:

  1. Get an organization. z.B. GET https://api.github.com/orgs/cloudify-cosmo, unter Verwendung der richtigen GitHub authentication credentials.
  2. die Authentifizierung Unter der Annahme, erfolgreich war, im Antworttext gibt es zwei Felder namens public_repos und total_private_repos
  3. Um die Anzahl der repos zu erhalten, fügen Sie einfach die Werte dieser beiden Felder aus.

Also, fehlt mir etwas? Gibt es eine ähnlich bequeme Möglichkeit (oder überhaupt), die Anzahl der Zweige eines Repos zu erhalten, ohne seine Verzweigungen aufzulisten?

+0

'GET/repos /: Besitzer /: Repo-/branches' ein Array zurückgibt, können Sie nicht nur die Länge, dass verwenden? – jready

+0

Ich kann das tun, aber das, wie ich spezifiziert habe, verlangt von mir, alle Zweige dieses Repos aufzulisten. Ich möchte die Anzahl der Filialen bekommen, ohne nach Informationen fragen zu müssen, genauso wie die Anzahl der Repos pro Organisation, die nur die Felder von 'GET/orgs /: org' verwenden, ohne auch eine Repo-Anfrage bearbeiten zu müssen, z.B 'GET/orgs /: org/repos' – aviyoop

Antwort

6

Derzeit gibt es kein solches Attribut.

Es gibt jedoch einen netten Trick, den Sie verwenden können, um das Abrufen aller Seiten zu vermeiden. Wenn Sie per_page-1 gesetzt, dann wird jede Seite 1 Artikel enthalten und die Anzahl der Seiten (von der letzten Seite offenbart) erhalten Sie die Gesamtzahl der Elemente auch sagen:

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

Also, mit nur einem Anfrage - Sie können die Gesamtzahl der Filialen erhalten. Zum Beispiel, wenn Sie diese URL holen und den Link-Header inspizieren:

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

dann werden Sie feststellen, dass die Link Header sind:

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" 

Dies sagt Ihnen, dass es 28 Seiten der Ergebnisse sind, und weil es ein Element pro Seite gibt - die Gesamtzahl der Zweige ist 28.

Hoffe, das hilft.

0

Sie können auch GraphQL API v4 verwenden, um Zweig leicht zählen zu erhalten:

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

Try it in the explorer

die gibt:

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

Wie Sie dies auf mehrere Repo tun, ist es auch einfacher mit GraphQL, wie Sie die Abfrage mit verschiedenen aliases pro Repo & erstellen können, verwenden Sie nur eine r equest zu Zweiganzahl für alle diese zu bekommen:

{ 
    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

Verwandte Themen