Estoy buscando un programa que pueda mostrar la evolución de los lenguajes de programación utilizados a lo largo del tiempo en un repositorio Git o SVN. La salida podría ser como la siguiente:
Hasta ahora, he intentado:
1) CLOC : la salida solo muestra el desglose del idioma actual:
2) StatSVN : genera muchas estadísticas como la evolución del número de líneas de código a lo largo del tiempo (me tomó 2 horas en el proyecto TortoiseSVN con:
svn checkout http://tortoisesvn.googlecode.com/svn/trunk/ tortoisesvn-read-only
svn log --xml -v > svn.log'
cd c:\statsvn
java -jar statsvn.jar C:\temp\svn\tortoisesvn\svn.log C:\temp\svn\tortoisesvn
)
cometer etiquetas de palabras:
muchas estadísticas de usuarios, etc., pero no lo que quiero.
Para los repositorios de git, usaría una combinación de CLOC y git de python, el siguiente script, ejecutado en un repositorio de git, produciría los archivos csv trimestrales, que luego podrían ser utilizados por cualquier programa de hoja de cálculo o trazados con las bibliotecas python csv y matplotlib .
#!/usr/bin/env python
#coding:utf-8
# Author: Steve Barnes --<gadgetsteve@hotmail.com>
# Purpose: Create cloc counts across years
# Created: 27/06/14
"""
This python script aims to run cloc multiple times on a git VCS as at quarterly
time intervals.
Usage:
python histcloc.py start_year [end_year]
"""
import sys
import csv
import os
import subprocess
import datetime
def GetNextQuaterDateStr(startyear, endyear):
""" Generator for the date strings of each quarter."""
quaterstartmonth = [1, 3, 6, 9]
first_year = int(startyear)
stop_at = int(endyear) + 1
for year in xrange(first_year, stop_at):
for month in quaterstartmonth:
yield '%04d-%02d-01' % (year, month)
def SetAsDate(datstr):
"""
For a specified repository set it to the state of the trunk on the specified
date
"""
commands = ['git', 'checkout',
"`git rev-list -n 1 --before=\"%s\" master`"% datstr]
print 'CMD:', ' '.join(commands)
#result = subprocess.call(commands) # This does'n work for some reason
result = os.system(' '.join(commands))
return result
def DoCloc(datsr):
""" Perform the cloc placing the results in a file specified by datestr."""
commands = ['perl',
'~/Downloads/cloc-1.60.pl', # Replace this to the cloc path
'.', '--csv', '--out=%s.csv' % datsr]
result = os.system(' '.join(commands))
return result
if __name__=='__main__':
if len(sys.argv) < 2:
print __doc__
sys.exit(1)
elif len(sys.argv) < 3:
sys.argv.append(datetime.datetime.now().year)
for y in GetNextQuaterDateStr(sys.argv[1], sys.argv[2]):
print 'Processing for:', y
SetAsDate(y)
DoCloc(y)
Para SVN, recomendaría encarecidamente tomar un clon de git del repositorio svn primero y luego usar lo anterior en eso, a menos que tenga una conexión T1, probablemente será más rápido que varias operaciones de verificación de svn.
ATG
Nick Dickinson Wilde
franck dernoncourt
ATG