Номер версии SVN в определенные файлы после любого изменения ревизии

В нашем проекте мы получили запрос на размещение номера корневой версии SVN (не последней измененной) в заголовках нашей библиотеки и предоставление функции в библиотеке, которая выдаст номер последней версии фиксации.

Я уже нашел этот вопрос, поэтому я знаю о $Id$ или $Revision$ . Чего я не знаю, можно ли заставить SVN (без дополнительных скриптов) обновлять некоторые конкретные файлы (заголовки и .cpp) после каждой фиксации.

Например: я изменяю файл .cpp и фиксирую его, но после фиксации будет обновлен не только измененный файл .cpp, но и файлы заголовков lib и небольшой < em> .cpp с номером ревизии фиксации.

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

Обновление: компиляция будет выполняться в среде, где SVN недоступен.


person Gabor Meszaros    schedule 11.02.2014    source источник
comment
Вы можете взглянуть на хуки в subversion, которые позволяют запускать произвольный код после фиксации. Но это означало бы создать кассу, изменить номера версий с помощью инструмента slike ed` или awk и снова проверить, все автоматически. Я сомневаюсь, что это хорошая и надежная стратегия. Я второй @Blorgbeard, что вам следует подумать об интеграции такой функции в вашу систему сборки. Просто создайте сценарий, который вы запускаете перед фиксацией.   -  person arkascha    schedule 11.02.2014


Ответы (2)


  1. Пожалуйста, используйте стандартные термины и определения, чтобы получить окончательный ответ - "номер корневой ревизии SVN" - это нечто, неизвестное в обычном мире SVN. Это «Глобальный идентификатор ревизии репозитория»?
  2. Ключевые слова SVN зависят от файла и не коррелируют с номером глобальной версии.
  3. Вы не можете зафиксировать принудительно неизмененные файлы с измененными, но вы можете зафиксировать эти необходимые файлы (с некоторыми уловками) в ловушке после фиксации после фиксации связанных файлов (но помните, что $ Revision $ в этих .cpp и .h будет в минимум Revision + 1 для реальных источников - и может быть больше +1, если обработчик post-commit не блокирует фиксацию во время выполнения)
  4. Вы можете получить и использовать Repo-Revision в своем коде и исходниках без svn: ключевых слов и | или хуков и дополнительных коммитов: за стоимость одной дополнительной операции в процессе сборки и внесения некоторых изменений в .cpp и .h в репозиторий. Прочтите о SubWCRev, части TortoiseSVN (Linux-эквивалент с добавленной стоимостью также существуют: SvnRev) и см. Пример использования ключевого слова, обратите внимание на рекомендацию в" Совете ". Рабочий процесс SvnRev немного отличается - он не обрабатывает шаблон, а строит заголовки, которые должны быть включены в подходящее место.
person Lazy Badger    schedule 11.02.2014

В наших проектах C / C ++ мы используем сочетание двух разных подходов к этому:

1 / Make использует subwcrev с входным файлом: version_info.src, создавая включаемый файл version_info.inc - он включен в наш код.

static cstring_t LastCommitDate = "@(#)SVN Info: Highest Commit Date $WCDATE=%H:%M %a %d-%b-%Y$";
static cstring_t InfoGenerated  = "@(#)SVN Info: Generated $WCNOW=%H:%M %a %d-%b-%Y$";
static cstring_t VersionRange   = "@(#)SVN Info: Built From Revision $WCRANGE$";
static cstring_t MixStatus      = "@(#)SVN Info: $WCMIXED?Mixed:Single$ Revision";
static cstring_t ModStatus      = "@(#)SVN Info: $WCMODS?Has:No$ Local Modifications";
#define CURRENT_REV_NUMBER $WCMIXED?0xffff:((uint16_t)$WCRANGE$)$
$WCMIXED?#define _MIXED_REV_BUILD_:$
$WCMODS?#define _BUILD_INCLUDES_MODIFICATIONS_:$
#ifdef _DEBUG_
#else
$WCMODS?#error *** SVN - Local Modifications Are NOT Permitted Within A Release Build! ***:/* SVN - OK for Release No Local Modifications */$
$WCMIXED?#error *** SVN - Mixed Revisions Are NOT Permitted Within A Release Build! Please Run a svn update!***:/* SVN - OK for Release Single Revision */$
#endif

Это включает в себя информацию о нашей версии для нас и не позволит нам создать сборку выпуска с измененным кодом.

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

person Steve Barnes    schedule 17.02.2014