Просмотр размера хранилища с течением времени
Есть ли способ получить размер хранилища для данной ревизии? Я хотел бы создать график, показывающий, как размер меняется с течением времени.
2 ответа
Вдохновленный ответом планетарного мастера, я написал эту команду:
hg log -r0:tip --stat --template 'date: {date|shortdate}\n' \
| awk \
'/^date:/ { date = $2 }
/^ *[0-9]+ files changed/ { sum += $4 - $6; print date, sum }' \
| awk \
'$1 != prevDate { if (prevLine != "") { print prevLine } }
{ prevLine = $0; prevDate = $1 }
END { print prevLine }'
Вторая команда awk отфильтровывает несколько коммитов с одной и той же датой, поэтому отображается только последний коммит в данную дату.
Пример вывода:
2014-09-22 304
2014-10-25 308
2014-12-25 320
2014-12-27 253
2015-03-17 252
2015-04-28 230
2015-05-22 241
2015-08-12 301
2015-07-13 302
2015-08-12 306
Обновление 2015-08-19: учетная запись для коммитов без изменений файла (иногда происходит с слиянием).
Это сложный вопрос.
Первый: что такое "размер"? Это размер в байтах? Или это количество строк кода?
Если ответ "байты", то нет другого способа, кроме как извлечь каждую ревизию, очистить рабочий каталог и проверить размер рабочего каталога.
Если ответ "строки кода", а хранилище содержит исключительно текстовые файлы, то вы можете обойтись без проверки каждой ревизии, используя hg log --stat
(см. также Как я могу вычислить сумму определенного столбца, используя bash?):
LC_ALL=C hg log -r0:tip --stat | grep 'insertions' | awk '{sum+=$4 ; min+=$6; print $4,$6} END {print "sum=",sum-min}'
Это проверено с помощью hg 3.4.2, но я не знаю каких-либо существенных изменений в выводе hg log --stat