Вопрос

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

Дополнительная информация о руководстве Subversion

Хорошее современное решение:

Создать Makefile содержащий следующую строку (в той же папке, что и YourFile.dox):

sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox

И YourFile.dox должно содержать это:

...
PROJECT_NUMBER         = "Revision RevNumber"
...

Сейчас:

  1. sed заменяет RevNumber в .dox с выводом svnversion (выполняется в основной папке вашего репозитория) и сохраняет измененный файл в YourFileDummy.dox
  2. doxygen выполняется на YourFileDummy.dox для создания документации
  3. Ваша документация теперь будет содержать номер версии!
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top