Как извлечь версию и путь из рабочей копии SVN в переменную nant?

#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 на самом деле не предназначены для прямого доступа. Я не очень много знаю о том, что вы делаете, но я бы предложил вам использовать механизм, который вы используете для проверки проекта, чтобы найти главную версию и путь. (Я бы на самом деле предположил, что, поскольку вы проверяете проект, вы уже знаете путь, но, возможно, это не так).

Извините, что не могу дать больше информации, чем эта.