Статистика эволюции языка в репозиториях Git и SVN

Я ищу программу, которая могла бы отображать эволюцию языков программирования, используемых с течением времени в репозитории Git или SVN. Вывод может быть таким:

введите описание изображения здесь

До сих пор я пробовал:

1) CLOC : вывод показывает только текущую языковую разбивку:

введите описание изображения здесь

2) StatSVN : он генерирует множество статистических данных, таких как изменение количества строк кода с течением времени (у меня ушло 2 часа на проект TortoiseSVN с:

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

)

введите описание изображения здесь

зафиксировать словесные теги:

введите описание изображения здесь

много пользовательской статистики и тд но не то что я хочу.

Что не так с решениями, которые вы нашли? Что именно вы подразумеваете под «эволюцией языков программирования»?
@ATG Я думаю, что он имеет в виду, что в декабре 2012 года репозиторий был на 50% Python, 30% C++, 15% Batch Script и 5% прочего, в декабре 2013 года репозиторий был на 45% Python, 40$ C++, 10% Batch Script и 5% % Другое - с графическим или текстовым выводом
@ATG Вы видели первый график в самом начале моего вопроса? Найденные мной решения не позволяют извлекать данные из репозитория. Я могу добавить все выходные графики StatSVN, но некоторые могут снова пожаловаться на RSI на основе прокрутки :)
Попался, так что вам нужны числа, которые используются для создания первого графика, в основном. Спасибо за разъяснение.

Ответы (1)

Для репозиториев git я бы использовал комбинацию CLOC и git из python, следующий скрипт, запускаемый в репозитории git, будет создавать ежеквартальные CSV-файлы, которые затем можно использовать в любой программе для работы с электронными таблицами или отображать с помощью библиотек python csv и 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)

Для SVN я бы настоятельно рекомендовал сначала взять git-клон репозитория svn, а затем использовать для этого вышеизложенное - если у вас нет соединения T1, это, вероятно, будет быстрее, чем несколько операций проверки svn.