Просмотр размера хранилища с течением времени

Есть ли способ получить размер хранилища для данной ревизии? Я хотел бы создать график, показывающий, как размер меняется с течением времени.

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

Другие вопросы по тегам