2015-10-20 19 views
6

Attualmente sto scrivendo un piccolo progetto utilizzando l'API GitHub v3.API GitHub - Ottieni il numero di filiali di un repository senza elencare tutti i suoi rami

Realizzo costantemente un calcolo basato sul numero di rami contenuti in un repository. Non riesco a trovare un modo per farlo senza richiedere anche a list all the branches of that repo. La necessità di richiedere che le filiali del repository aggiungano tempi di esecuzione non necessari, specialmente quando si tratta di centinaia di repository, contenenti dozzine di filiali ciascuna.

L'apparente mancanza di capacità di farlo mi ha colto di una piccola sorpresa, dal momento che un'operazione del tutto simile, ottenendo il numero dei pronti contro termine di un'organizzazione, è facilmente reperibile in questo modo:

  1. Get an organization. per esempio. GET https://api.github.com/orgs/cloudify-cosmo, utilizzando l'appropriato GitHub authentication credentials.
  2. Supponendo che l'autenticazione è riuscita, nel corpo di risposta ci sono due campi denominati public_repos e total_private_repos
  3. Per ottenere il numero di pronti contro termine, è sufficiente aggiungere i valori di questi due campi.

Quindi, mi manca qualcosa? Esiste un modo similmente conveniente (o in alcun modo) di ottenere il numero di filiali di un repository senza dover elencare i suoi rami?

+0

'GET/repos /: proprietario /: repo/branches' restituisce un array, si può non solo utilizzare la lunghezza di questo? – jready

+0

Posso farlo, ma che, come ho specificato, mi richiede di elencare tutti i rami di quel repository. Mi piacerebbe ottenere il numero di filiali senza dover chiedere informazioni exrta, proprio come ottenere il numero di repository per organizzazione usando solo i campi di 'GET/orgs /: org', senza dover anche gestire una richiesta di pronti contro termine, per esempio 'GET/orgs /: org/repos' – aviyoop

risposta

6

Attualmente questo attributo non esiste.

Tuttavia, esiste un trucco che è possibile utilizzare per evitare di recuperare tutte le pagine. Se si imposta per_page-1, ogni pagina contiene 1 articolo e il numero di pagine (rivelato da l'ultima pagina) vi dirà anche il numero totale di elementi:

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

Così, con un solo richiesta: puoi ottenere il numero totale di filiali. Ad esempio, se si Fetch questo URL e ispezionare l'intestazione Link:

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

allora si noterà che l'intestazione 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" 

Questo vi dice che ci sono 28 pagine di risultati, e perché c'è un articolo per pagina - il numero totale di filiali è 28.

Spero che questo aiuti.

0

È inoltre possibile utilizzare GraphQL API v4 per ottenere contare facilmente ramo:

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

Try it in the explorer

che dà:

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

Come si sta facendo questo su repo multipla, è anche più semplice con GraphQL come è possibile creare la query con diverso aliases per repo & utilizzare solo una r equest per ottenere conteggio ramo per tutti questi:

{ 
    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