#svn #nant #svn-repository
Вопрос:
Я создаю новый процесс сборки для проекта DotNet, который будет проходить в Subversion.
Для каждой библиотеки dll/exe, которую я компилирую (через Nant) Я хотел бы включить 2 дополнительных атрибута в создаваемые библиотеки DLL.
Я уже понимаю, как работает задача «asminfo». Но мне нужна помощь в извлечении информации, которую я надеюсь встроить в свои двоичные файлы.
Сборка всегда будет выполняться из полной рабочей копии (проверенной самим процессом сборки.) и, следовательно, всегда будет доступен каталог .svn.
Атрибуты, которые я хочу добавить, — это RepositoryVersion и repositoryPath. (Я понимаю, что это не те имена, под которыми эта информация проходит в svn)
Для этого мне нужно будет извлечь версию репозитория и путь к репозиторию, представленные папкой рабочей копии, в которой находится файл сборки.
Как мне извлечь эту информацию из любой заданной папки .svn в 2 переменные nant?
Ответ №1:
Во-первых, вы можете использовать «svn info —xml >out.xml» чтобы получить информацию о svn в текстовый файл. Затем вы можете использовать Nant xml-peek, чтобы получить значение из файла в переменную.
<xmlpeek file="out.xml" xpath="/info/entry/url" property="svn.url" />
Ответ №2:
Вот как я это делаю для номера редакции:
<exec
program="svn"
commandline='log "${solution.dir}" --xml --limit 1'
output="${solution.dir}_revision.xml"
failonerror="false"/>
<xmlpeek
file="${solution.dir}_revision.xml"
xpath="/log/logentry/@revision"
property="version.revision"
failonerror="false"/>
<delete file="${solution.dir}_revision.xml" failonerror="false"/>
Ответ №3:
Я бы рекомендовал вам встроить ключевые слова svn в файл сборки в качестве свойств. Напр.:
<property name="RepositoryPath" value="$HeadURL$" />
<property name="RepositoryVersion" value="$Revision$" />
Ответ №4:
Записи в каталоге .svn на самом деле не предназначены для прямого доступа. Я не очень много знаю о том, что вы делаете, но я бы предложил вам использовать механизм, который вы используете для проверки проекта, чтобы найти главную версию и путь. (Я бы на самом деле предположил, что, поскольку вы проверяете проект, вы уже знаете путь, но, возможно, это не так).
Извините, что не могу дать больше информации, чем эта.