В прошлом люди возвращали огромные файлы в наш репозиторий Subversion и позже сожалели об этом. Чтобы исправить это, они просто удалили каталог и сделали еще одну проверку (оставив массивные файлы в истории репозитория).
Поскольку эти огромные файлы были случайными и не предназначались для того, чтобы быть в истории, я хотел отфильтровать их с помощью svndumpfilter. Есть ли простой способ найти большие каталоги, которые были зарегистрированы? Может быть, отсортировать различия ревизий по размеру?
Я в основном нашел его, проанализировав файл svndump и используя небольшой скрипт на Python:
$ # dump repository to file
$ svnadmin dump /var/lib/svn/ > svn_full_dump.txt
$ # find byte offsets of 'Revision-number' ignoring non-ascii and save in file
$ egrep -boa '^Revision-number: .+$' svn_full_dump.txt > revisions.txt
$ head revisions.txt
75:Revision-number: 0
195:Revision-number: 1
664:Revision-number: 2
863:Revision-number: 3
1058:Revision-number: 4
1254:Revision-number: 5
1858:Revision-number: 6
$ # find size of checkins and sort by size
$ python revision_size.py | sort -nr | head
1971768485 r1528
44453981 r2375
39073877 r1507
34731033 r2394
30499012 r484
...
Файл python:
#!/usr/bin/env python
f = file('revisions.txt')
last_offset = 0
last_revision = None
for l in f:
l = l.strip()
(offset, middle, revision) = l.split(':')
offset = int(offset.strip())
revision_size = offset-last_offset
if last_revision:
print '%s r%s'%(revision_size, last_revision.strip())
last_revision = revision
last_offset = offset
# will ignore last revision
f.close()
update: исправлена ошибка в скрипте revision_size, из-за которой размер не совсем соответствовал нужной ревизии.