Как получить рекурсивный отчет svn blame в одном XML-файле для всех недвоичных файлов в ветви?

StackOverflow https://stackoverflow.com/questions/413777

Вопрос

Как я могу получить полностью рекурсивный отчет svn вины для всех недвоичных файлов в ветке, где выходные данные находятся в одном файле в формате xml и включают в себя ревизию, дату, автора, имя файла & amp; путь, а текст строки самого файла? Весь вывод должен быть в одном файле. Он будет выполнен как часть сборки через экземпляр CCNet.

Доступными инструментами являются последняя стабильная версия nant и nantcontrib, msbuild и последняя версия командной строки svn.

Вот некоторые из проблем, с которыми я столкнулся: Командная строка Команда svn blame не поддерживает рекурсию каталога. Параметр Blame --xml не включает фактический текст каждой строки, хотя в нем есть все остальное. По умолчанию nantcontrib передает параметр --quiet (в отличие от ссылки на задачу), который не поддерживается в команде blame. Задача svn Nantcontrib может не принять параметр --xml.

Это было полезно?

Решение

Простой ответ заключается в том, что не существует простого способа сделать это. Лучший, самый правильный способ - написать собственный svn-клиент (или расширить существующий), чтобы он обладал необходимыми вам функциями. Вряд ли тривиально.

Существует также неправильный способ сделать это, который также включает в себя написание кода. Не делайте этого .

find . -type f | grep -v .svn | xargs svn blame > line_data
find . -type f | grep -v .svn | xargs svn --xml blame > xml_data

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

К сожалению, я думаю, что это степень поддержки того, что вы хотите со стандартным клиентом SVN, и я не могу найти других клиентов, которые делают вещи лучше (некоторые даже не поддерживают обвинение ).

Другие советы

Я не знаю, какую ОС вы используете. Но вы можете попробовать использовать простой цикл FOR и команду " svn ls -R " чтобы рекурсивно вывести список всех файлов в вашей ветви (рабочая область / URL), а затем направить его по адресу "svn blame --xml".

Я опробовал это в командной строке SVN, и она отлично работает (Windows XP, SVN 1.4.4). Команда, которую я использовал, выглядит следующим образом:

FOR / F " usebackq delims == " % i IN ( svn ls -R http: // myurl / mybranch ) DO @svn обвиняют --xml% i

Примечание. Вы можете избежать некоторых " url not found " тип ошибок, если вы вводите эту команду в рабочей области (отражающей корень ветки) и используете 'svn ls -R` вместо URL-адреса в приведенной выше команде.

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top