Получение номера репозитория 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 $ который затем может анализировать...

дополнительная информация о руководстве 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. ваша документация будет содержать номер версии!