2011-01-13 9 views
5

Il sito web del generatore di statistiche in questione è:Come posso modificare gitstats per utilizzare solo un'estensione di file specificata per le sue statistiche?

http://gitstats.sourceforge.net/ 

suo repository git può essere clonato da:

git clone git://repo.or.cz/gitstats.git 

Quello che voglio fare è qualcosa di simile:

./gitstatus --ext=".py" /input/foo /output/bar 

Non riuscendo a passare facilmente l'opzione di cui sopra senza modifiche pesanti, vorrei solo hard-code l'estensione del file che voglio essere inclusa.

Tuttavia, non sono sicuro della sezione di codice pertinente da modificare e, anche se l'avessi saputo, non sono sicuro di come avviare tali modifiche.

E 'sembra come sarebbe piuttosto semplice, ma ahimè ...

risposta

6

Ho trovato questa domanda oggi mentre cercavo la stessa cosa. Dopo aver letto la risposta di Sinelaw, ho esaminato il codice e ho finito col biforcare il progetto.

https://github.com/ShawnMilo/GitStats

ho aggiunto un'opzione di configurazione "exclude_extensions". Non ha effetto su tutte le parti dell'output, ma sta arrivando.

Potrei finire per fare una riscrittura piuttosto estesa una volta capito completamente tutto ciò che sta facendo con l'output git. Il progetto originale è stato avviato quasi esattamente quattro anni fa oggi e c'è un sacco di pulizia che può essere fatto a causa di molti aggiornamenti della libreria standard e del linguaggio Python.

+0

Ho pensato brevemente di scrivere la mia soluzione. Grazie per avermi alleviato. –

+0

è ancora in fase di sviluppo? è esattamente quello che stavo cercando, ma ho bisogno che le linee di codice nel tempo siano influenzate dalle stesse esclusioni. – danb

3

EDIT: a quanto pare, anche la soluzione precedente sotto effetto solo nella pagina stat "Files", che non è interessante. Sto cercando di trovare qualcosa di meglio. La linea che dobbiamo risolvere è 254, questo:

lines = getpipeoutput(['git rev-list --pretty=format:"%%at %%ai %%aN <%%aE>" %s' % getcommitrange('HEAD'), 'grep -v ^commit']).split('\n') 

tentativo precedente era:

Purtroppo, sembra che git non fornisce opzioni per una facile filtraggio per i file in un commit (nel registro git e git rev-list). Questa soluzione in realtà non filtra tutte le statistiche per determinati tipi di file (come le statistiche sui tag), ma lo fa per la parte che calcola l'attività in base al numero di linee modificate.

Così il meglio che ho potuto venire in mente è alla linea 499 di gitstats (script principale):

res = int(getpipeoutput(['git ls-tree -r --name-only "%s"' % rev, 'wc -l']).split('\n')[0]) 

È possibile cambiare la situazione o l'aggiunta di un tubo nella grep nel comando, in questo modo:

res = int(getpipeoutput(['git ls-tree -r --name-only "%s"' % rev, 'grep \\.py$', 'wc -l']).split('\n')[0]) 

O, si potrebbe dividere la parte 'wc -l', ottenere l'output di git ls-albero in una lista di stringhe, e filtrare i nomi dei file risultanti utilizzando il modulo fnmatch (e poi contare il linee in ogni file, possibilmente usando 'wc -l') ma suona come eccessivo per il problema specifico che stai tr per risolvere.

Ancora non risolve il problema (il resto delle statistiche ignorerà questo filtro), ma si spera utile.

+0

Inizierò a esaminare questo e vedere cosa vedo. Grazie per l'aiuto. :) –

+0

Non mi è chiaro quale sia la linea da modificare in –

Problemi correlati