SVN: Возможно ли получить список номеров ревизий для заданного пути?

Я создаю инструмент PHP, который подключается к репозиторию, загружает список коммитов и сохраняет их локально. Тем не менее, из-за того, что некоторые репозитории являются ОГРОМНЫМИ, и захват их результатов журнала приводит к длительному времени ожидания и возможным тайм-аутам/ошибкам, я хотел бы загрузить каждое сообщение фиксации, используя асинхронные запросы.

Итак, у меня есть начальная и конечная точки в истории изменений, и я могу захватить все журналы следующим образом:

svn log -r <from_revision>:<to_revision> <REPO_URL>

... и я, возможно, закончим с XML файлом, который настолько велик, что потребуется много времени для загрузки, долгого времени и большого количества ресурсов для синтаксического анализа и долгого времени для хранения.

Если я знаю начало и конечную точку, я могу создать цикл for() для поочередного просмотра ревизий:

svn log -r <revision> ...

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

Итак, мне нужно что-то вроде этого:

  • "дайте мне список номеров ревизий для этого пути", OR:
  • "дайте мне список номеров ревизий для этого пути, между и

Таким образом, я смогу сделать массив допустимых изменений для пути репозитория и получить их один за другим.

Все предложения приветствуются, спасибо заранее.

Ответы

Ответ 1

Я думаю, что лучше всего сделать следующее svn log -l 100 0:{$newest} .\, которое будет извлекать первые 100 журналов для данного каталога или файла. затем прочитайте последний номер возвращаемой версии, затем запросите следующие 100 svn log -l 100 {$last_ret_log}:{$newest} .\

таким образом вы получите 99 новых записей журнала с каждым запросом, но вы не получите их всех.

Ответ 2

Если у вас есть доступ к дереву репозитория на сервере Subversion, вы можете использовать svnlook history для получения списка номеров ревизий.

Более подробную информацию можно найти на http://svnbook.red-bean.com/en/1.1/re49.html.

Ответ 3

Я только пытался получить аналогичный результат. Мне просто нужны все номера ревизий для конкретной ветки.

Я нашел следующее, чтобы быть весьма полезным.

svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv

Это дает мне файл со всеми номерами ревизий в отдельных строках.

Надеюсь, вам или кому-то еще будет полезно.

У нашего репо более 25000 исправлений, и для создания этого файла требуется несколько секунд.

Ответ 4

Вы можете посмотреть svn list. Итак, для вашей цели:


$ svn list --verbose file:///var/svn/repos
     16 sally         28361 Jan 16 23:18 README.txt
     27 sally             0 Jan 18 15:27 INSTALL
     24 harry               Jan 18 11:27 examples/

Здесь перечисляется последняя (головная) версия любого файла.

Ответ 5

svn log url -l limitNumber - r fromReversion:toReversion

если U хочет найти следующую более старую (меньшую) реверсию (версию) например

   svn log url -l 4 -r someVersion:1
 or
   svn log url -l 4 -r 99: 3

fromReversion больше, чем toReversion если U хочет найти следующую новую (большую) реверсию (версию)

  svn log url -l 4 -r someVersion:head
or   
  svn log url -l 4 -r 3:99
   fromReversion lower than toReversion