Ecco come lo farei:
- utilizzare l'API GitHub per enumerare i repository (vedi JSON for Plone per un esempio). Effettua il loop sul risultato JSON e con ciascuno:
- Controlla il repository (l'URL
git_url
) con git clone --bare
; solo le informazioni git, nessuna copia funzionante. Ciò crea una directory <repository_name>.git>
, ad esempio plone.event.git
se è stata clonata git://github.com/plone/plone.event.git
.
- Contare le revisioni con
git --git-dir=<git_directory> rev-list HEAD --count
; restituisce il conteggio allo stdout, quindi subprocess.check_output()
dovrebbe fare il lavoro bene.
- Rimuovere il
.git
directory nuovamente
che richiede solo 2 chiamate API, in modo da evitare di essere tasso limitato; sfogliare tutti i commit con l'API richiederebbe troppe richieste per contare tutti i commit del repository, controllando comunque che una copia del repository nuda sarebbe più veloce in ogni caso.
fonte
2013-04-23 08:58:40