Russian Qt Forum
Ноябрь 23, 2024, 05:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Автоподсчёт версии билда  (Прочитано 2612 раз)
QuAzI
Гость
« : Апрель 01, 2012, 12:43 »

Хочу сделать автоподсчёт версии через awk/sed/grep. Ковырялся вчера, получилось что-то такое
Для Windows
Код:
gawk "BEGIN {FS=\"=\"} /^VERSION_BUILD/ {print $2+1}" version.pri
sed "s/^VERSION_BUILD.*=.*/VERSION_BUILD=5/" version.pri > version.pri.new
move /y version.pri.new version.pri
Для FreeBSD (и по идее Linux'ов всяких).
Код:
awk 'BEGIN {FS="="} /^VERSION_BUILD/ {print $2+1}' version.pri
sed 's/^VERSION_BUILD.*=.*/VERSION_BUILD=5/' version.pri > version.pri.new
mv version.pri.new version.pri
В первой строке определение новой версии, во второй подмена старой версии на VERSION_BUILD=5. Ну это так, для тестов. Подскажите, как это можно объединить и желательно впихнуть в PRO-файл? А то у меня Qt вообще начинает с ума сходить после попыток выполнить это, пробовал экранировать спец.символы - без результата, хотя в консоли всё отлично.

Вообще по идее это может быть и однострочная команда
Код:
awk 'BEGIN {FS="="} /^VERSION_BUILD/ {print "sed \047s/^VERSION_BUILD.*=.*/VERSION_BUILD =",$2+1,"/\047",FILENAME }' 3gmonitor.pri

gawk "BEGIN {FS=\"=\"} /^VERSION_BUILD/ {print \"sed \047s/^VERSION_BUILD.*=.*/VERSION_BUILD =\",$2+1,\"/\047\",FILENAME }" 3gmonitor.pri
print выводит правильную команду, но пытался заменить print на command(), чтобы это выполнилось - awk дохнет.

И такой сугубо личный вопрос: по какому принципу минорный и мажорный номера версий меняете?
Записан
QuAzI
Гость
« Ответ #1 : Апрель 02, 2012, 03:17 »

В общем до конца с консольными утилитами так и не разобрался, сделал по мотивам этой штуки себе генератор
http://qtcreator.blogspot.com/2010/01/code-to-generate-version-number-header.html

Нумерация идёт так:
мажорная_версия.минорная.ревизия_SVN.дата_билда
мажорная и минорная версии меняются только руками
ревизия SVN тянется через запуск svnversion в директории проекта ( и при правильном подходе за один коммит как раз должно делаеться одно исправление/изменение в плане функционала )
дата билда = текущий год и количество дней от начала года

Параметры запуска софтины:
 мажорная_версия   минорная_версия   [имя_файла]

Только в моём случае генерится version.pri, а не version.h и уже из него инфа тыкается по ресурсным файлам/дефайнам.
И ещё поправил, чтобы можно было не указывать имя файла, по умолчанию всё ложится в version.pri
Кидается софтинка куда-нить, куда смотрит %PATH% (я не долго думая кинул в \windows\system32) и забывается.
Исходники в аттаче, авось ещё кому пригодится. Примеры - там же в исходниках
« Последнее редактирование: Апрель 02, 2012, 15:28 от QuAzI » Записан
QuAzI
Гость
« Ответ #2 : Ноябрь 29, 2012, 14:45 »

Перешёл на Git, отказался от файла хранящего номер версии полностью.
Теперь пляшу от тега вида X.Y.Z и количества коммитов после создания последнего тега.
Код:
exists( $$PWD/.git ) {
    VCS_VERSION = $$system( git describe --tags )
    VCS_VERSION_SPLITED = $$split(VCS_VERSION, "-")
    VCS_TAG = $$member(VCS_VERSION_SPLITED, 0)
    VCS_TAG_SPLITED = $$split(VCS_TAG, ".")
    VERSION_MAJOR = $$member(VCS_TAG_SPLITED, 0)
    VERSION_MINOR = $$member(VCS_TAG_SPLITED, 1)
    VERSION_PATCH = $$member(VCS_TAG_SPLITED, 2)
    VCS_REVISION = $$member(VCS_VERSION_SPLITED, 1)
    USERNAME=$$system( git config --get user.name )
}

isEmpty(VERSION_MAJOR): VERSION_MAJOR = 0
isEmpty(VERSION_MINOR): VERSION_MINOR = 0
isEmpty(VERSION_PATCH): VERSION_PATCH = 0
isEmpty(VCS_REVISION): VCS_REVISION = 0
VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_PATCH}.$${VCS_REVISION}
isEmpty(USERNAME) {
    win32: USERNAME = $$system( echo %USERNAME% )
    unix:  USERNAME = $$system( echo $USER  )
}

# Получение даты сборки в формате DD.MM.YYYY_hh:mm:ss
win32: {
        BUILDDATE = $$system( date /t ) $$system( time /t )
        BUILDDATE = $$member(BUILDDATE,0)_$$member(BUILDDATE,1)
}
unix:  BUILDDATE = $$system( date "+%d.%m.%Y_%H:%M:%S" )

DEFINES += \
    VERSION_MAJOR=$$VERSION_MAJOR \
    VERSION_MINOR=$$VERSION_MINOR \
    VERSION_PATCH=$$VERSION_PATCH \
    VCS_REVISION=$$VCS_REVISION \
    VERSION=$$VERSION \
    USERNAME=$$USERNAME \
    TARGET=$$TARGET \
    QT_VERS=$$[QT_VERSION] \
    BUILDDATE=$$BUILDDATE
VCS_REVISION нужен в том числе как 4-ое число при генерации версии. Сам Qt для QApplication учитывает только 3 числа
Код:
qApp->setApplicationVersion(QString("%1.%2.%3")
                                    .arg(VERSION_MAJOR)
                                    .arg(VERSION_MINOR)
                                    .arg(VERSION_PATCH));
Но в RC-файле для Win требуется 4 числа
Код:
        FILEVERSION    VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,VCS_REVISION
        PRODUCTVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,VCS_REVISION
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.041 секунд. Запросов: 20.