Как получить рекурсивный отчет об svn-винах в одном XML-файле для всех недвоичных файлов в ветви?
Как я могу получить полностью рекурсивный отчет svn вины для всех недвоичных файлов в ветке, где выходные данные находятся в одном файле в формате xml и включают в себя ревизию, дату, автора, имя файла и путь, а также текст строки сам файл? Весь вывод должен быть в одном файле. Он будет выполнен как часть сборки через экземпляр CCNet.
Доступными инструментами являются последняя стабильная версия nant и nantcontrib, msbuild и последняя версия командной строки svn.
Вот некоторые из проблем, с которыми я столкнулся: Командная строка Команда svn blame не поддерживает рекурсию каталога. Параметр Blame --xml не включает фактический текст каждой строки, хотя в нем есть все остальное. По умолчанию nantcontrib передает параметр --quiet (в отличие от ссылки на задачу), который не поддерживается в команде blame. Задача svn Nantcontrib может не принять параметр --xml.
2 ответа
Простой ответ заключается в том, что не существует простого способа сделать это. Лучший, самый правильный способ - написать собственный svn-клиент (или расширить существующий), чтобы он обладал необходимыми вам функциями. Вряд ли тривиально.
Есть также неправильный способ сделать это, который также включает в себя написание кода. Не делай этого:
находить. тип F | grep -v.svn | xargs svn blame> line_data
находить. тип F | grep -v .svn | xargs svn --xml blame > xml_data
Вы могли бы сценарий двух svn
команды вместе, чтобы избежать запуска find
дважды, но это все равно будет мучительно медленным. Чтобы добавить оскорбление к травме, вам нужно будет самостоятельно проанализировать два файла, чтобы добавить фактические исходные строки в данные XML.
К сожалению, я думаю, что это степень поддержки того, что вы хотите со стандартным клиентом SVN, и я не могу найти других клиентов, которые делают вещи лучше (некоторые даже не поддерживают blame
).
Я не знаю, какую ОС вы используете. Но вы можете попробовать использовать простой цикл FOR и команду "svn ls -R", чтобы рекурсивно вывести список всех файлов в вашей ветви (workspace/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 в приведенной выше команде.
Надеюсь это поможет.