На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Версия программы из Subversion , установка versioninfo через командную строку, с помощью TortoiseSVN
      Ручная установка версии продукта, частный случай - в качестве номера билда берется ревизия из 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. Команда
      ExpandedWrap disabled
        SubWCRev $(PROJECTDIR) version.rc.tmpl version.rc
      создает version.rc, который, разумеется, в хранилище не идет.
      3. Команда
      ExpandedWrap disabled
        BRCC32 -32 -v -c1251 -m version.rc -foversion
      компилирует файл ресурсов. Остается только включить его в проект:
      4.
      ExpandedWrap disabled
        {$R *.res}
        {$R version.res}

      Вот собственно и все, теперь при компиляции в номер билда записывается номер HEAD ревизии. Разве что можно добавить -nm для SubWCRev, и проанализировать код возврата при релизе. Для надежности.
        Хе. сенкс, интересно.
        Плохо только то, что мажорные/минорные версии нуно ручками в файле править, а не из IDE -)
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0272 ]   [ 16 queries used ]   [ Generated: 28.03.24, 14:52 GMT ]