Название: Автоподсчёт версии билда
Отправлено: 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 дохнет. И такой сугубо личный вопрос: по какому принципу минорный и мажорный номера версий меняете?
Название: Re: Автоподсчёт версии билда
Отправлено: QuAzI от Апрель 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) и забывается. Исходники в аттаче, авось ещё кому пригодится. Примеры - там же в исходниках
Название: Re: Автоподсчёт версии билда
Отправлено: QuAzI от Ноябрь 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
|