sunLoadingImage
whowedImag
decoration left 1
decoration left 2
transhome
transprojects
transgallery
transarticles
decoration rigth
English
Українська
Show/Hide search bar
black cat logo variable logo
[09 Лис 2012]

Як автоматично додати поточний номер ревізії в код?

Для кожної release версії моїх попередніх проектів я вручну обновляв спеціальні числові значення (#define), які означали номер версії та час збірки проекту. В програмах ці значення відображалися при завантаженні (splash screen) або в діалозі "Про програму" (About). Я використовував Subversion, і мені стало цікаво, чи можливо взяти номер ревізії з робочої копії мого проекту і підставити його у необхідні файли (так як я зазвичай забував їх оновити перед збіркою).

Після коротких пошуків я знайшов утиліту під ОС Windows, яка може може виконати необхідні дії. Це SubWCRev. SubWCRev - консольна програма, яка може прочитати дані з робочої копії Subversion (каталог розробки), замінити ключові слова в файлі-шаблоні і перемістити готовий файл у папку з проектом.

Як використовувати SubWCRev.exe?

Утиліту SubWCRev легко застосувати. Вона має наступні вхідні аргументи:

  • Шлях до робочої копії (або під-папка чи окремий файл)
  • Шлях до файла-шаблона
  • Шлях до і назва вихідного файлу (де створити)
  • Другорядні необовязкові аргументи, які дозволяють видавати помилку, наприклад, якщо репозиторій містить новішу копію, якщо робоча копія містить зміни чи якщо вона частково оновлена.

    Виклик SubWCRev.exe може виглядати наступним чином: SubWCRev "../workingCopy" "template.h" "../workingCopy/defines.h"

    SubWCRev може повертати помилки. Наприклад помилка з кодом "2" означає, що неможливо знайти вказаний файл чи каталог.

    Файл-шаблон

    Файл-шаблон містить ключові слова, які будуть замінені утилітою SubWCRev. Далі наведено найбільш уживані з них:

  • $WCREV$ – номер ревізії з робочої копії.
  • $WCDATE$ – дата відсилання останьої ревізії в репозиторій.
  • $WCMOD$ – вказує чи код містить локальні модифікації (не відіслані в репозиторій).
  • $WCNOW$ – поточна системна дата.
  • $WCRANGE$ – інтервал ревізій (якщо робоча копія містить різні ревізії)

    Файл-шаблон може виглядати наступним чином (template.h): #define REVISION_FROM_SVN $
    #define DATE_OF_REVISION $

    Після заміни буде створено вихідний файл, наприклад (../workingCopy/defines.h): #define REVISION_FROM_SVN 113
    #define DATE_OF_REVISION 2012/11/8 13:14:08

    SubWCRev.exe та файл-шаблон повинні бути включені до проекту (commit). Файл defines.h потрібно заборонити відсилати (ignore), так як він буде змінюватися при кожній компіляції, і призводити до створення нової ревізії, без реальних модифікацій проекту.

    SubWCRev і Visual Studio

    SubWCRev можна використовувати з Visual Studio наступним чином: Створити .bat файл для автоматичного виклику SubWCRev.exe (svn_reader.bat): SubWCRev.exe "../workingCopy" "template.h" "../workingCopy/defines.h"

    І додати подію збірки у Visual Studio (Project –> Properties –> Build Events –> Pre-Build Event -> Command line): cd "$(SolutionDir)/pathToSubWCRev/"
    svn_reader.bat

    SubWCRev і Qt

    Також SubWCRev можна використовувати в QT. Для цього необхідно додати новий крок збірки:

  • Projects -> Build -> BuildSteps -> Add Build Step
  • В полі Command необхідно вказати шлях до SubWCRev.exe та аргументи
  • Встановіть робочу директорію (папка з SubWCRev, або інша)
  • Перемістіть крок збірки на найвищу позицію

    Це все. Тепер ваші програми завжди відображатимуть коректний номер версії.




  • Sun and Black Cat- Ігор Дихта (igor dykhta email) © 2007-2014