Gear/specsubst: различия между версиями
Real (обсуждение | вклад) (Gear/specsubst) |
|||
(не показано 10 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
В середине декабря 2012 по мотивам [https://bugzilla.altlinux.org/show_bug.cgi?id=20912 идеи Саши Бокового] | |||
в {{pkg|gear}} была реализована возможность управляемым и воспроизводимым образом | |||
https://bugzilla.altlinux.org/show_bug.cgi?id=20912 | |||
реализована возможность управляемым и воспроизводимым образом | |||
экспортировать различные варианты исходного кода из одного и того же | экспортировать различные варианты исходного кода из одного и того же | ||
коммита. | коммита. | ||
Этот эффект достигается путем подстановки в спек-файле @переменных@, | Этот эффект достигается путем подстановки в спек-файле <tt>@переменных@</tt>, | ||
заданных в новой директиве | заданных в новой директиве <tt>specsubst:</tt>, в соответствии с определением | ||
переменных в тэге, из которого производится экспорт исходного кода. | переменных в тэге, из которого производится экспорт исходного кода. | ||
При использовании specsubst коммит фактически превращается в шаблон, не | Новая функциональность активируется только при условии использования | ||
<tt>specsubst</tt>, что гарантирует полную обратную совместимость. | |||
При использовании <tt>specsubst</tt> коммит фактически превращается в шаблон, не | |||
предназначенный для непосредственной сборки, но из которого с помощью тэга | предназначенный для непосредственной сборки, но из которого с помощью тэга | ||
можно получить реализацию шаблона, которую уже можно собирать. | можно получить реализацию шаблона, которую уже можно собирать. | ||
Это, в частности, означает, что для сборки пакета, использующего механизм | |||
specsubst, | <tt>specsubst</tt>, необходим специальный тег. При локальной сборке из тега | ||
этот тег нужно явно указывать: | |||
gear -t <tagname>... | |||
При использовании specsubst команда gear --commit создает не только | При использовании <tt>specsubst</tt> команда {{cmd|gear --commit}} создает не только | ||
временный commit object, но и временный tag object, используя для | временный commit object, но и временный tag object, по умоланию используя для | ||
определения подстановочных переменных конфигурационные значения | определения подстановочных переменных конфигурационные значения | ||
gear.specsubst.* | <tt>gear.specsubst.*</tt> при их наличии в {{path|.git/config}} проекта; например: | ||
[gear "specsubst"] | |||
kflavour = un-def | |||
{{Note|При использовании переменной в {{path|.git/config}} нужно запускать <tt>gear --commit</tt>}} | |||
При отсутствии переменной в теге (<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 | |||
Синтаксис новой директивы и формат описания подстановочных переменных в | Синтаксис новой директивы и формат описания подстановочных переменных в | ||
тэге приведен в gear-rules(5). | тэге приведен в <tt>gear-rules(5)</tt>. | ||
Первыми пользователями <tt>specsubst</tt> стали шаблоны модулей ядра | |||
(см. тж. [http://www.altlinux.org/index.php?title=Git.alt/Справочник&diff=0&oldid=22016 task add kmodules]). | |||
== Использование в произвольном пакете == | |||
Для примера возьмем пакет {{pkg|blender}}. | |||
В {{path|blender.spec}}: | |||
<source lang="spec">... | |||
Release: @RepoRelease@.1 | |||
... | |||
* Mon Feb 29 2016 Andrey Cherepanov <cas@altlinux.org> 2.69-@RepoRelease@.1 | |||
- Rebuild with new boost | |||
...</source> | |||
В {{path|.gear/rules}}: | |||
<source lang="text">specsubst: RepoRelease | |||
...</source> | |||
Подстановка значения осуществляется <u>при создании тега</u>, в теле описания тега ({{term|-m}}): | |||
<source lang="bash">gear-create-tag -m "blender-2.69-alt1.1 | |||
X-gear-specsubst: RepoRelease=alt1"</source> | |||
Обратите внимание на то, что команда gear-create-tag идёт в две строки. Во второй строке задаётся собственно значение подставляемого параметра: | |||
X-gear-specsubst: RepoRelease=alt1 | |||
Имя созданного тега при этом также будет содержать шаблон подстановки. Не пугайтесь, так и надо: | |||
<source lang="text">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</source> | |||
после этого пушим тег в репозиторий и собираем с ним: | |||
git push origin sisyphus 2.69-@RepoRelease@.1 | |||
ssh build.alt build blender 2.69-@RepoRelease@.1 | |||
Сборочница через gear подставит значение для {{term|RepoRelease}}. | |||
== Локальная сборка == | |||
Когда вы собираете локально в тестовых целях, удобно установить параметр {{term|gear.specsubst.<параметр>}} с вашим параметром (например, kflavour): | |||
<syntaxhighlight lang="text">$ git config --add gear.specsubst.kflavour std-def</syntaxhighlight> | |||
После этого модуль можно собрать с помощью команды: | |||
<syntaxhighlight lang="text">$ gear --commit --hasher hsh</syntaxhighlight> | |||
== Ссылки == | |||
* [http://lists.altlinux.org/pipermail/devel/2012-December/196170.html ldv@ in devel@] | |||
* [[Справочник по gear]] | * [[Справочник по gear]] | ||
* [[Руководство по gear]] | * [[Руководство по gear]] | ||
{{Category navigation|title=Gear/specsubst|category=Gear | |||
{{Category navigation|title=Gear/specsubst|category=Gear|sortkey=*}} |
Текущая версия от 12:35, 13 апреля 2024
В середине декабря 2012 по мотивам идеи Саши Бокового в gear была реализована возможность управляемым и воспроизводимым образом экспортировать различные варианты исходного кода из одного и того же коммита.
Этот эффект достигается путем подстановки в спек-файле @переменных@, заданных в новой директиве specsubst:, в соответствии с определением переменных в тэге, из которого производится экспорт исходного кода.
Новая функциональность активируется только при условии использования specsubst, что гарантирует полную обратную совместимость.
При использовании specsubst коммит фактически превращается в шаблон, не предназначенный для непосредственной сборки, но из которого с помощью тэга можно получить реализацию шаблона, которую уже можно собирать.
Это, в частности, означает, что для сборки пакета, использующего механизм specsubst, необходим специальный тег. При локальной сборке из тега этот тег нужно явно указывать:
gear -t <tagname>...
При использовании 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.
Локальная сборка
Когда вы собираете локально в тестовых целях, удобно установить параметр gear.specsubst.<параметр> с вашим параметром (например, kflavour):
$ git config --add gear.specsubst.kflavour std-def
После этого модуль можно собрать с помощью команды:
$ gear --commit --hasher hsh
Ссылки