Estadísticas de evolución del lenguaje en repositorios Git y SVN

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:

ingrese la descripción de la imagen aquí

Hasta ahora, he intentado:

1) CLOC : la salida solo muestra el desglose del idioma actual:

ingrese la descripción de la imagen aquí

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

)

ingrese la descripción de la imagen aquí

cometer etiquetas de palabras:

ingrese la descripción de la imagen aquí

muchas estadísticas de usuarios, etc., pero no lo que quiero.

¿Qué hay de malo en las soluciones que has encontrado? ¿Qué quiere decir exactamente con "evolución de los lenguajes de programación"?
@ATG Creo que quiere decir que en diciembre de 2012 el repositorio era 50% Python, 30% C++, 15% Batch Script y 5% otros, diciembre de 2013 el repositorio era 45% Python, 40$ C++, 10% Batch Script y 5 % Otro - con salida gráfica o de texto
@ATG ¿Viste el primer gráfico, justo al comienzo de mi pregunta? Las soluciones que he encontrado no permiten extraer los datos de un repositorio. Puedo agregar todos los gráficos de salida de StatSVN, pero algunos pueden quejarse nuevamente sobre el RSI basado en desplazamiento :)
Lo tengo, entonces quieres los números que se usan para producir el primer gráfico, básicamente. Gracias por aclararlo.

Respuestas (1)

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.