example python ruby git lines-of-code

python - example - ¿Cómo puedo representar gráficamente el historial de líneas de código para git repo?



install git python (4)

Básicamente, quiero obtener el número de líneas de código en el repositorio después de cada confirmación.

La única (realmente horrible) forma que he encontrado es usar git filter-branch para ejecutar wc -l * , y un script que ejecuta git reset --hard en cada commit, luego ejecuta wc -l

Para hacerlo un poco más claro, cuando se ejecuta la herramienta, daría como salida las líneas de código de la primera confirmación, luego la segunda y así sucesivamente. Esto es lo que quiero que la herramienta muestre (como ejemplo):

me@something:~/$ gitsloc --branch master 10 48 153 450 1734 1542

He jugado con la biblioteca ''git'' de ruby, pero lo más parecido que encontré fue usar el método .lines() en un diff, que parece que debería dar las líneas adicionales (pero no lo hace: devuelve 0 cuando elimina líneas por ejemplo)

require ''rubygems'' require ''git'' total = 0 g = Git.open(working_dir = ''/Users/dbr/Desktop/code_projects/tvdb_api'') last = nil g.log.each do |cur| diff = g.diff(last, cur) total = total + diff.lines puts total last = cur end


Lo primero que me viene a la mente es la posibilidad de que tu historial de git tenga un historial no lineal. Puede tener dificultades para determinar una secuencia razonable de confirmaciones.

Habiendo dicho eso, parece que podría mantener un registro de identificadores de commit y las líneas de código correspondientes en ese commit. En un enganche post-commit, comenzando desde la revisión HEAD, trabaje hacia atrás (ramificándose a múltiples padres si es necesario) hasta que todas las rutas alcancen una confirmación que ya haya visto antes. Eso debería proporcionarle las líneas de código totales para cada identificación de confirmación.

¿Eso ayuda? Tengo la sensación de haber malinterpretado algo acerca de tu pregunta.


Puede obtener líneas agregadas y eliminadas con registro de git, como:

git log --shortstat --reverse --pretty=oneline

A partir de esto, puede escribir un script similar al que usó con esta información. En Python:

#!/usr/bin/python """ Display the per-commit size of the current git branch. """ import subprocess import re import sys def main(argv): git = subprocess.Popen(["git", "log", "--shortstat", "--reverse", "--pretty=oneline"], stdout=subprocess.PIPE) out, err = git.communicate() total_files, total_insertions, total_deletions = 0, 0, 0 for line in out.split(''/n''): if not line: continue if line[0] != '' '': # This is a description line hash, desc = line.split(" ", 1) else: # This is a stat line data = re.findall( '' (/d+) files changed, (/d+) insertions/(/+/), (/d+) deletions/(-/)'', line) files, insertions, deletions = ( int(x) for x in data[0] ) total_files += files total_insertions += insertions total_deletions += deletions print "%s: %d files, %d lines" % (hash, total_files, total_insertions - total_deletions) if __name__ == ''__main__'': sys.exit(main(sys.argv))


También puede considerar gitstats , que genera este gráfico como un archivo html.