Подтвердить что ты не робот

Получение номера репозитория subversion в код

Я хотел бы реализовать способ записи версии проекта в код, чтобы его можно было использовать при тестировании и для отслеживания ошибок. Кажется, лучший номер версии для использования будет только текущим номером ревизии из Subversion. Есть ли простой способ привязать это число к заголовочному файлу (С++ в моем случае) или к чему-то, что я могу получить в коде? Я предполагаю, что это фиксация сообщения или что-то еще?

Есть ли у кого-нибудь опыт реализации этого (с кодом для обмена, пожалуйста?) или может предложить лучшую альтернативу? Спасибо.

4b9b3361

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