Как получить рекурсивный отчет svn blame в одном XML-файле для всех недвоичных файлов в ветви?
-
03-07-2019 - |
Вопрос
Как я могу получить полностью рекурсивный отчет 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-адреса в приведенной выше команде. Р>
Надеюсь, это поможет.