Gear/specsubst: различия между версиями
м (gear.specsubst по сути содержит значение по умолчанию (необязательное)) |
м (ключевые строки для поиска на всякий...) |
||
Строка 22: | Строка 22: | ||
[gear "specsubst"] | [gear "specsubst"] | ||
kflavour = un-def | kflavour = un-def | ||
При отсутствии переменной в теге (<tt>gear</tt>) или переменной (<tt>gear --commit</tt>) будет выдано соответствующее сообщение об ошибке: | |||
gear: specsubst directive requires a tag | |||
либо | |||
gear: failed to prepare temporary tag: git config option "gear.specsubst.kflavour" not found | |||
Синтаксис новой директивы и формат описания подстановочных переменных в | Синтаксис новой директивы и формат описания подстановочных переменных в |
Версия от 16:31, 5 марта 2018
В середине декабря 2012 по мотивам идеи Саши Бокового в gear была реализована возможность управляемым и воспроизводимым образом экспортировать различные варианты исходного кода из одного и того же коммита.
Этот эффект достигается путем подстановки в спек-файле @переменных@, заданных в новой директиве specsubst:, в соответствии с определением переменных в тэге, из которого производится экспорт исходного кода.
При использовании specsubst коммит фактически превращается в шаблон, не предназначенный для непосредственной сборки, но из которого с помощью тэга можно получить реализацию шаблона, которую уже можно собирать.
Новая функциональность активируется только при условии использования specsubst, что гарантирует полную обратную совместимость.
При использовании specsubst команда gear --commit создает не только временный commit object, но и временный tag object, по умоланию используя для определения подстановочных переменных конфигурационные значения gear.specsubst.* при их наличии в .git/config проекта; например:
[gear "specsubst"] kflavour = un-def
При отсутствии переменной в теге (gear) или переменной (gear --commit) будет выдано соответствующее сообщение об ошибке:
gear: specsubst directive requires a tag
либо
gear: failed to prepare temporary tag: git config option "gear.specsubst.kflavour" not found
Синтаксис новой директивы и формат описания подстановочных переменных в тэге приведен в gear-rules(5).
Первыми пользователями specsubst стали шаблоны модулей ядра (см. тж. task add kmodules).
Использование в произвольном пакете
Для примера возьмем пакет blender.
В blender.spec:
...
Release: @RepoRelease@.1
...
* Mon Feb 29 2016 Andrey Cherepanov <cas@altlinux.org> 2.69-@RepoRelease@.1
- Rebuild with new boost
...
В .gear/rules:
specsubst: RepoRelease
...
Подстановка значения осуществляется при создании тега, в теле описания тега (-m):
gear-create-tag -m "blender-2.69-alt1.1
X-gear-specsubst: RepoRelease=alt1"
Обратите внимание на то, что команда gear-create-tag идёт в две строки. Во второй строке задаётся собственно значение подставляемого параметра:
X-gear-specsubst: RepoRelease=alt1
Имя созданного тега при этом также будет содержать шаблон подстановки. Не пугайтесь, так и надо:
git show -s --format=%s 2.69-@RepoRelease@.1 | cat
tag 2.69-@RepoRelease@.1
Tagger: Andrey Cherepanov <cas@altlinux.org>
blender-2.69-alt1.1
X-gear-specsubst: RepoRelease=alt1
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iEYEABECAAYFAlbULWMACgkQSGPA9Knr8TEMKACfXTcThXrTxeHsGuwISS0KMIKK
XfIAoIwiCsT66o1zlCq+kt/U5TOzG6K4
=mLVM
-----END PGP SIGNATURE-----
2.69-alt1.1
после этого пушим тег в репозиторий и собираем с ним:
git push origin sisyphus 2.69-@RepoRelease@.1 ssh build.alt build blender 2.69-@RepoRelease@.1
Сборочница через gear подставит значение для RepoRelease.
Ссылки