Получение номера репозитория subversion в коде - PullRequest
39 голосов
/ 19 августа 2008

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

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

Ответы [ 6 ]

27 голосов
/ 19 августа 2008

Два способа:

Вставить $ Id $ или $ Revision $ в коде. Затем установите для файла svn: Keywords = "Id Revision" свойство. Это даст вам последнюю измененную ревизию этого исходного файла. Подходит для небольших проектов и сценариев.

В качестве альтернативы используйте процесс, управляемый Makefile, и инструмент командной строки svnversion. (Для конкретного языка - это должно работать для C / C ++)

echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h

Или какой-нибудь более сложный скрипт сборки с sed и version.h.in. Тогда просто # включите version.h

Это даст вам номер версии репозитория, который будет меняться при каждой фиксации / обновлении и, вероятно, будет более подходящим номером версии для большинства проектов.

Примечание: я также использовал читаемую человеком версию, которую я обновляю вручную. Пример даст: Версия: 1.0.1-r13445

* * ~ Тысячу двадцать-три J
14 голосов
/ 30 августа 2008

Отличный трюк с ключевыми словами ревизии обновляет файл только после его изменения в этой ревизии - если вы не измените файл, он будет продолжать отражать старую ревизию.

Если вы хотите, чтобы программное обеспечение всегда отражало общий номер ревизии, вам придется углубиться в соответствующий файл записей SVN и извлечь его, что не так уж сложно (это файл XML ).

Википедия делает это на странице их версии , чтобы указать ревизию программного обеспечения, которое работает вживую; код здесь - ищите метод getSvnRevision () .

13 голосов
/ 09 октября 2008

Вы также можете использовать SubWCRev, который является частью TortoiseSVN.

SubWCRev - консольная программа Windows, которую можно использовать для чтения статуса рабочей копии Subversion и, при необходимости, для подстановки ключевых слов в файле шаблона. Это часто используется как часть процесса сборки как средство включения информации рабочей копии в объект, который вы строите. Обычно его можно использовать для включения номера редакции в поле «О программе».

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

6 голосов
/ 11 мая 2013

в вашем Makefile, добавьте:

SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...

тогда вы можете использовать макрос SVN_REV в любом месте вашего кода, например:

printf ("Version: SVN %s\n", SVN_REV);
4 голосов
/ 19 августа 2008

Вы можете использовать свойство svn:keywords для включения ключевого слова Rev.

Затем вы можете использовать $Rev$ в своем коде, и SVN автоматически расширит его при обновлении до $Rev: 256 $, которое затем сможет анализировать ...

Подробнее о руководстве Subversion

0 голосов
/ 18 апреля 2017

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

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