Получение номера репозитория subversion в код
Я хотел бы реализовать способ записи версии проекта в код, чтобы его можно было использовать при тестировании и для отслеживания ошибок.
Кажется, лучший номер версии для использования будет только текущим номером ревизии из Subversion. Есть ли простой способ привязать это число к заголовочному файлу (С++ в моем случае) или к чему-то, что я могу получить в коде? Я предполагаю, что это фиксация сообщения или что-то еще?
Есть ли у кого-нибудь опыт реализации этого (с кодом для обмена, пожалуйста?) или может предложить лучшую альтернативу?
Спасибо.
Ответы
Ответ 1
Несмотря на то, что трюк ключевого слова версии только обновляет файл, когда он изменился в этой версии, - если вы не измените файл, он будет продолжать отражать старую ревизию.
Если вы хотите, чтобы программное обеспечение всегда отображало общий номер ревизии, вам нужно будет вникать в соответствующий файл записей SVN и извлечь это, что не слишком сложно (это файл XML).
Wikipedia делает это на странице своей версии, чтобы указать версию программного обеспечения, работающего в прямом эфире; код здесь - найдите метод getSvnRevision().
Ответ 2
Два способа:
Вставить $Id $или $Revision $в код. Затем установите в файле свойство svn: keywords = "Id Revision". Это даст вам последнюю измененную версию этого исходного файла. Хорошо подходит для небольших проектов и сценариев.
В качестве альтернативы используйте процесс, управляемый Makefile, и инструмент svnversion для командной строки. (Зависит от языка - это должно работать на C/С++)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
Или более сложная сборка script с sed и version.h.in. Затем просто #include version.h
Это даст вам номер версии репозитория, который будет изменяться с каждым фиксацией/обновлением и, вероятно, является более подходящим номером версии для большинства проектов.
Примечание. Я также использовал строку для чтения человеком, которую я вручную обновляю. Пример даст: Версия: 1.0.1-r13445
~ J
Ответ 3
Вы также можете использовать SubWCRev, который является частью TortoiseSVN.
SubWCRev - консольная программа Windows, которая может использоваться для чтения статуса рабочей копии Subversion и, возможно, для замены ключевого слова в файле шаблона. Это часто используется как часть процесса сборки как средство включения рабочей копии информации в объект, который вы строите. Обычно он может быть использован для включения номера версии в поле "О программе".
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
Ответ 4
в файле Makefile, добавьте:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
то вы можете использовать макрос SVN_REV
в любом месте вашего кода, например:
printf ("Version: SVN %s\n", SVN_REV);
Ответ 5
Вы можете использовать свойство svn:keywords
, чтобы включить ключевое слово Rev
.
Затем вы можете использовать $Rev$
в своем коде, а SVN автоматически расширяет его при обновлении до $Rev: 256 $
, который затем может анализироваться...
Дополнительная информация о руководстве Subversion
Ответ 6
Хорошее современное решение:
Создайте 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
для создания документации
- Ваша документация теперь будет содержать номер версии!