Gear/specsubst
Материал из ALT Linux Wiki
В середине декабря 2012 по мотивам идеи Саши Бокового в gear была реализована возможность управляемым и воспроизводимым образом экспортировать различные варианты исходного кода из одного и того же коммита.
Этот эффект достигается путем подстановки в спек-файле @переменных@, заданных в новой директиве specsubst:, в соответствии с определением переменных в тэге, из которого производится экспорт исходного кода.
При использовании specsubst коммит фактически превращается в шаблон, не предназначенный для непосредственной сборки, но из которого с помощью тэга можно получить реализацию шаблона, которую уже можно собирать.
Новая функциональность активируется только при условии использования specsubst, что гарантирует полную обратную совместимость.
При использовании specsubst команда gear --commit создает не только временный commit object, но и временный tag object, используя для определения подстановочных переменных конфигурационные значения gear.specsubst.* (см. .git/config проекта); например:
[gear "specsubst"] kflavour = un-def
Синтаксис новой директивы и формат описания подстановочных переменных в тэге приведен в 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.
Ссылки