Является ли единственный способ перечислить "живые" ревизии определенного пути SVN "svn log -q -v" плюс фильтр? - PullRequest
0 голосов
/ 22 октября 2009

Является ли выполнение "svn log -q -v" во всех ревизиях для корня хранилища с последующей фильтрацией по нужному пути действительно лучшим (только?) Способом сделать это? Нам необходимо найти эти диапазоны, чтобы обеспечить автоматическую проверку версий и добавить вспомогательные сведения в нашу отчетность об изменениях.

Я сделал небольшую оптимизацию, чтобы запросить рут уже:

Задан путь:

Протокол: //server/repo/a/b/c/d/foo.txt

Я уже написал скрипт для выполнения повторяющихся запросов журнала svn по пути:

svn log -q -v ... / a / b / c / d / foo.txt
svn log -q -v ... / a / b / c / d
svn log -q -v ... / a / b / c
svn log -q -v ... / a / b
svn log -q -v ... / a
svn log -q -v ...

пока я не получу:

svn: файл не найден: ...

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

Вышеприведенное не работает, если у предка несколько живых диапазонов; если кто-то не знает лучше, мой единственный вариант - запросить из корня хранилища.

Из результатов я, по сути, хочу список отдельных диапазонов, в которых существует файл (который я позже могу изменить, чтобы также отслеживать историю, чтобы у воскрешенного файла было несколько диапазонов; как бы странно это ни звучало, у нас есть случаи где файлы с одинаковым путем оказываются не связанными). В данный момент я анализирую номера ревизий по мере их прохождения, отслеживая последнюю ревизию нужного пути, где он или один из его предков был удален (изначально HEAD, который будет перезаписан, если я увижу удаление). Когда я вижу, что путь был добавлен, я выбрасываю диапазон rev_added - rev_lastdeleted.

Вышеописанное работает, но оно включает в себя прохождение довольно большого количества информации, большая часть которой ложная. Есть ли более эффективный способ сделать это, предпочтительно тот, в котором больше работы выполняется на стороне сервера, чтобы минимизировать сетевой трафик (большая часть нашей работы выполняется удаленно через VPN)?

Похоже, что TortoiseSVN может предоставить эту же информацию единственным способом - выполнить тот же процесс (получить журнал предка и затем выполнить фильтрацию).

1 Ответ

0 голосов
/ 22 октября 2009

Я так не думаю. Если вы хотите отформатировать эти данные определенным образом, вам придется взять вывод SVN и обработать его так, как вы это делаете.

Выходные данные svn log filename должны дать вам все соответствующие ревизии для filename & mdash; включая историю перемещений / переименований & mdash; который вы можете затем отформатировать, как вы хотите.

...