Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.135.224] |
|
Сообщ.
#1
,
|
|
|
Ручная установка версии продукта, частный случай - в качестве номера билда берется ревизия из Subversion.
Обычно информация о версии продукта указывается в свойствах проекта и еомпилируется в файл ресурсов самой средой. Это до сих пор так, несмотря на то, что в новых версиях Delphi применяется MSBuild, и эта информация есть в .dproj. К сожалению, в любом случае используется информация, содержащаяся в .res файле проекта. А туда она записывается из среды. Это недавно обсуждалось: CMD MSBuild can't increment build number?, тут же даны номера багрепортов. В принципе, это давно привычно: в свойствах проекта можно выставить все что требуется, и сделать автоприращение номера билда. Но когда используется система контроля версий, то, как правило, этот самый номер билда идет вразнос: Delphi - это не C++, билд проекта выполняется быстро и всеми разработчиками. И в зависимости от параметров, либо файл ресурсов долгое время не изменяется, либо номер билда скачет непредсказуемо и устанавливается вручную по мере надобности. Subversion отличается хорошей особенностью: при любом изменении хранилища увеличивается номер ревизии. И здесь на мой взгляд вполне естественным является стремление указать в последней цифре версии этот самый номер ревизии. Это информативно, и сразу можно сказать, что за модуль и из какой ревизии он создан, что весьма помогает в сопровождении. Получается некоторая самодокументируемость, можно сказать. Но тут сразу возникает препятствие, файл ресурсов - двоичный, сопровождается средой разработки, и изменяется из нее. И информация о версии берется только из него. И сливать неудобно, и редактировать. Поэтому предлагаю следующее: 1. Version info выключается в свойствах проекта. Придется создавать вручную. 2. Создается файл, например, version.rc, с информацией о версии, который компилируется BRCC32 в res и подключается к проекту. Файл текстовый, так что проблем нет. Естественно, в новых версиях Delphi компиляцию можно сделать в pre-buid. Теперь конкретика с подводными камнями. С изменением версии проблем нет, я использую TortoiseSVN, и утилита SubWCRev легко выдает нужный номер ревизии, подставляя его в rc файл. Проблема возникает с языком. Американцам хорошо, а вот остальным: Абракадабра вместо русских символов в res.... Баг с компилятором ресурсов в новых версиях, в rw32core.dll. Там же дан и выход: взять эту библиотеку от D7. Если не получается - используйте либо другой компилятор, либо пишите по-английски. В вопросе на Королевстве дан и хороший пример файла с информацией о версии. Синтаксис пожно найти в MSDN: VERSIONINFO Resource. С преодолением этого вопроса все просто, особенно когда есть события на компиляцию: 1. Создаем файл version.rc.tmpl, шаблон, с вставкой в нужных местах $WCREV$: Цитата , и добавляем его в контроль версий. FILEVERSION 2,5,0,$WCREV$ 2. Команда SubWCRev $(PROJECTDIR) version.rc.tmpl version.rc 3. Команда BRCC32 -32 -v -c1251 -m version.rc -foversion 4. {$R *.res} {$R version.res} Вот собственно и все, теперь при компиляции в номер билда записывается номер HEAD ревизии. Разве что можно добавить -nm для SubWCRev, и проанализировать код возврата при релизе. Для надежности. |
Сообщ.
#2
,
|
|
|
Хе. сенкс, интересно.
Плохо только то, что мажорные/минорные версии нуно ручками в файле править, а не из IDE -) |