Gear/specsubst: различия между версиями

Материал из ALT Linux Wiki
(как правильно указать тег при сборке из тега оказалось неочевидно)
 
(не показаны 2 промежуточные версии этого же участника)
Строка 28: Строка 28:
   [gear "specsubst"]
   [gear "specsubst"]
           kflavour = un-def
           kflavour = un-def
{{Note|При использовании переменной в {{path|.git/config}} нужно запускать <tt>gear --commit</tt>}}


При отсутствии переменной в теге (<tt>gear</tt>) или переменной (<tt>gear --commit</tt>) будет выдано соответствующее сообщение об ошибке:
При отсутствии переменной в теге (<tt>gear</tt>) или переменной (<tt>gear --commit</tt>) будет выдано соответствующее сообщение об ошибке:
Строка 85: Строка 87:


Сборочница через gear подставит значение для {{term|RepoRelease}}.
Сборочница через 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>


== Ссылки ==
== Ссылки ==

Текущая версия от 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
Примечание: При использовании переменной в .git/config нужно запускать gear --commit


При отсутствии переменной в теге (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

Ссылки