Самый быстрый способ получить последнюю версию комм-файла svn с python
Теперь у меня есть папка SVN около 40000 файлов. Я хочу получить последнюю версию коммита файла, как это.
res/image/1.png 27123
res/map/101/1.png 14654
Я попробовал писвн. И у него есть функция list_recursive, она работает, но очень медленно.
Поэтому я хочу знать, есть ли быстрый способ получить результат.
РЕДАКТИРОВАТЬ
Наконец, я нашел самый быстрый способ выполнить это - вызватьsvn list -v --recursive >> output.txt, а затем использовать python для чтения данных из файла output.txt.
Это намного быстрее, чем использование библиотеки pysvn.
1 ответ
Если чистый раствор Bash соответствует вашим требованиям:
for i in `find . -type d -name .svn -prune -or -type f`; do
echo "$i: " $(svn info $i 2>/dev/null | grep '^Last Changed Rev')
done
Краткое объяснение:
- Поиск найдет все файлы (
-type f
), которые не находятся в каталоге.svn (-prune
) - Для каждого из них
svn info
соберет нужную вам информацию иgrep
отфильтрует все остальное.
В соответствии с этим (извините, не найдена ссылка на версию RedBeans):
Доступ к хранилищу
Только при работе с URL
Так что должно быть довольно быстро. Во всяком случае, я сделал этот небольшой тест:
time (
for i in `find . -type d -name .svn -prune -or -type f`; do
echo "$i: " $(svn info $i 2>/dev/null | grep '^Last Changed Rev')
done | wc
)
925 3325 87256
real 0m17.231s
user 0m2.648s
sys 0m1.416s
К сожалению, моя рабочая копия была на NFS, поэтому время может быть совершенно неприменимо к вам, но вы можете ожидать до 12 минут для вашего случая. Не уверен, что это достаточно быстро.