Подсчет файлов и каталогов в очень большом хранилище Subversion - PullRequest
3 голосов
/ 19 июля 2011

Здесь, на работе, у нас довольно большой репозиторий subversion. В рамках нашего внутреннего мониторинга мы хотим подсчитать все файлы и каталоги для каждой ревизии во всех наших репозиториях. Проблема в том, что одна из них имеет около 29000 ревизий и содержит около 300000 каталогов с почти 4 миллионами файлов. Наш предыдущий метод просто использовал вывод команды 'svnlook' в скрипте perl для подсчета всего. Я попытался использовать вывод 'svnlook change' для построения счетчика, и он в основном работает, но есть некоторые довольно раздражающие догадки. Напомним, что репозитории размещены на xen vm, поэтому производительность ввода-вывода является проблемой. У кого-нибудь есть лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 11 ноября 2013

Если вы говорите о репозиториях на стороне сервера.

svn list -R --xml file:///svnrepos/myrepo | grep kind=\"file\" | wc -l

это не очень быстро, но это точно.

0 голосов
/ 19 июля 2011

Как насчет чего-то вроде:

find /svndir | wc -l

Вывод команды find в Linux или Unix генерирует одну строку на файл или каталог, и это рекурсивно.Передайте вывод в «wc -l» для подсчета строк.

0 голосов
/ 19 июля 2011

Я бы заглянул в дельта-формат svnadmin. Я немного поиграл с этим, но в основном это один огромный файл типа патча, содержащий все файлы и все ревизии. Это текст по своей природе, поэтому относительно просто для обработки с чем-то вроде Perl, и он довольно мал по сравнению с прохождением всей ревизии по одному.

Вам, вероятно, нужно иметь представление всех файлов (если 4 миллиона, возможно, для этого используйте SQLite) и обновлять их по мере прохождения каждой ревизии. Дельта выполняет ревизии по порядку, поэтому она должна быть относительно простой. (Может быть, я настроен оптимистично.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...