Я ищу программу, которая могла бы отображать эволюцию языков программирования, используемых с течением времени в репозитории 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
)
зафиксировать словесные теги:
много пользовательской статистики и тд но не то что я хочу.
Для репозиториев 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.
АТГ
Ник Дикинсон-Уайлд
Франк Дернонкур
АТГ