Самый быстрый способ получить последнюю версию комм-файла 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

Краткое объяснение:

  1. Поиск найдет все файлы (-type f), которые не находятся в каталоге.svn (-prune)
  2. Для каждого из них 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 минут для вашего случая. Не уверен, что это достаточно быстро.

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