Получение номера репозитория Subversion в коде
Вопрос
Я хотел бы реализовать способ записи версии проекта в коде, чтобы его можно было использовать при тестировании и отслеживать ошибки.Кажется, лучше всего использовать номер текущей версии из Subversion.Есть ли простой способ подключить этот номер к заголовочному файлу (в моем случае C++) или чему-то еще, что я затем смогу получить в коде?Я думаю, это крючок после фиксации или что-то в этом роде?
Есть ли у кого-нибудь опыт реализации этого (поделитесь кодом, пожалуйста?) Или может предложить лучшую альтернативу?Спасибо.
Решение
Хотя это и изящно, трюк с ключевым словом ревизии обновляет файл только тогда, когда он был изменен в этой ревизии - если вы не измените файл, он продолжит отражать старую ревизию.
Если вы хотите, чтобы программное обеспечение всегда отражало общий номер версии, вам придется углубиться в соответствующий файл записей SVN и извлеките его, что не так уж сложно (это XML-файл).
Википедия делает это на страница их версии для указания версии программного обеспечения, которое работает в реальном времени; код здесь - ищите getSvnRevision() метод.
Другие советы
Два пути:
Встроить $Идентификатор$ или $Редакция$ внутри кода.Затем установите svn:keywords="Редакция идентификатора" свойство в файле.Это даст вам последнюю измененную версию этого исходного файла.Хорошо подходит для небольших проектов и сценариев.
Альтернативно используйте процесс, управляемый Makefile, и инструмент командной строки svnversion.(В зависимости от языка – это должно работать для C/C++)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
Или какой-нибудь более сложный скрипт сборки с sed и version.h.in.Тогда просто #include version.h
Это даст вам номер версии репозитория, который будет меняться при каждом коммите/обновлении и, вероятно, является более подходящим номером версии для большинства проектов.
Примечание:Я также использовал удобочитаемую строку версии, которую обновляю вручную.Пример даст: Версия:1.0.1-r13445
~Дж
Вы также можете использовать SubWCRev, который является частью TortoiseSVN.
SubWCRev — это консольная программа Windows, которую можно использовать для чтения статуса рабочей копии Subversion и, при необходимости, выполнения замены ключевых слов в файле шаблона.Это часто используется как часть процесса сборки как средство включения информации рабочей копии в создаваемый объект.Обычно его можно использовать для включения номера версии в поле «О программе».
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
в вашем Makefile добавьте:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
тогда вы можете использовать макрос SVN_REV
в любом месте вашего кода, например:
printf ("Version: SVN %s\n", SVN_REV);
Вы можете использовать svn:keywords
свойство, позволяющее Rev
ключевое слово.
Затем вы можете использовать $Rev$
в вашем коде, и SVN автоматически расширит его при обновлении до $Rev: 256 $
который затем может анализировать...
Хорошее современное решение:
Создать Makefile
содержащий следующую строку (в той же папке, что и YourFile.dox
):
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
И YourFile.dox
должно содержать это:
...
PROJECT_NUMBER = "Revision RevNumber"
...
Сейчас:
sed
заменяетRevNumber
в .dox с выводомsvnversion
(выполняется в основной папке вашего репозитория) и сохраняет измененный файл вYourFileDummy.dox
doxygen
выполняется наYourFileDummy.dox
для создания документации- Ваша документация теперь будет содержать номер версии!