Получение номера репозитория subversion в коде
Я хотел бы реализовать способ записи версии проекта в коде, чтобы его можно было использовать при тестировании и для отслеживания ошибок. Кажется, лучшим номером версии для использования будет только текущий номер версии из Subversion. Есть ли простой способ подключить это число в файл заголовка (C++ в моем случае) или что-то еще, что я могу получить в коде? Я думаю, это крюк post commit или что-то еще?
есть ли у кого-нибудь опыт реализации этого (с кодом, чтобы поделиться, пожалуйста?), или может предложить лучшую альтернативу? Спасибо.
6 ответов
в то время как nifty, трюк с ключевым словом revision обновляет файл только тогда, когда он изменен в этой ревизии - если вы не измените файл, он будет продолжать отражать старую ревизию.
Если вы хотите, чтобы программное обеспечение всегда отражало общий номер редакции, вам придется углубиться в соответствующий файл записей SVN и извлечь его, не слишком сложно (это XML-файл).
Википедия делает это на их версия страницы в укажите ревизию программного обеспечения, которое работает в реальном времени;код здесь - ищите getSvnRevision () метод.
два варианта:
Embed $Id$ или $ Revision$ в коде. Затем установите svn: keywords= "ID Revision" свойство в файле. Это даст вам последнюю измененную версию этого исходного файла. Хорошо для небольших проектов и сценариев.
кроме того, используйте управляемый Makefile процесс и средство командной строки svnversion. (Специфичный язык - это должно работать для C / C++)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
или более сложная сборка скрипт с sed и версией.h.внутри. Тогда просто #включить версию.h
это даст вам номер версии репозитория, который будет меняться с каждой фиксацией / обновлением и, вероятно, является более подходящим номером версии для большинства проектов.
Примечание: я также использовал читаемую человеком строку версии, которую я вручную обновляю. Пример даст:версия: 1.0.1-r13445
~J
вы также можете использовать 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) ...
тогда вы можете использовать macro 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
для создания документация - ваша документация будет содержать номер версии!