Next: Вызов guix describe
, Previous: Запуск guix time-machine
, Up: Управление пакетами [Contents][Index]
Примечание: Функциональность, описанная здесь, — это обзор технологии версии 33665c5. Интерфейс может меняться.
Иногда вам может понадобиться перемешивать пакеты из ревизии Guix, которая работает в настоящий момент, с пакетами, доступными в другой ревизии Guix. Основания Guix inferiors позволяют вам получить это, составляя различные ревизии Guix произвольным образом.
Технически работа с ранними версиями — это в целом отдельный процесс Guix,
связанный с главным процессом Guix через REPL (see Вызов guix repl
). Модуль (guix inferior)
позволяет запускать ранние версии и
взаимодействовать с ними. Он также предоставляет высокоуровневый интерфейс
для обзора и управления пакетами, которые поставляет ранняя версия —
ранние версии пакетов.
При сочетании с каналами (see Каналы) ранние версии предоставляют
простой способ взаимодействовать с отдельными ревизиями Guix. Например,
предположим, вы хотите установить в ваш профиль текущий пакет guile
вместе с тем guile-json
, который был определён в предыдущей ревизии
Guix (может быть, потому что новый guile-json
имеет несовместимый
API, и вы хотите запустить ваш код со старым API). Чтобы это сделать, можно
написать манифест для использования с guix package --manifest
(see Writing Manifests). В этом манифесте вы создадите описание ранней
версии той предыдущей ревизии Guix, которая вас интересует, в которой вы
ищете пакет guile-json
ранней версии:
(use-modules (guix inferior) (guix channels) (srfi srfi-1)) ;for 'first' (define channels ;; This is the old revision from which we want to ;; extract guile-json. (list (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit "65956ad3526ba09e1f7a40722c96c6ef7c0936fe")))) (define inferior ;; An inferior representing the above revision. (inferior-for-channels channels)) ;; Now create a manifest with the current "guile" package ;; and the old "guile-json" package. (packages->manifest (list (first (lookup-inferior-packages inferior "guile-json")) (specification->package "guile")))
Далее запуск guix package --manifest
может вызвать сборку канала,
который вы обозначили ранее, и в результате это задействует раннюю
версию. Последовательные запуски будут быстрее, потому что ревизия Guix
будет кеширована.
Модуль (guix inferior)
предоставляет следующие процедуры для работы с
ранними версиями:
Return an inferior for channels, a list of channels. Use the cache at cache-directory, where entries can be reclaimed after ttl seconds. This procedure opens a new connection to the build daemon.
Как побочный эффект, эта процедура может собирать или скачивать подстановки бинарников для channels, что может занять время.
Open the inferior Guix in directory, running
directory/command repl
or equivalent. Return #f
if the inferior could not be launched.
Процедуры, приведённые ниже, обеспечивают работу и управление ранними версиями пакетов.
Возвращает список пакетов, относящихся к ранней версии inferior.
Return the sorted list of inferior packages matching name in inferior, with highest version numbers first. If version is true, return only packages with a version number prefixed by version.
Возвращает true, если объект obj — это пакет ранней версии.
Эти процедуры являются двойниками метода доступа к записям пакетов
(see package
Ссылка). Большинство из них работают с запросами для
ранней версии, из которой происходит package, так что ранняя версия
должна оставаться живой, когда вы вызываете эти процедуры.
Пакеты ранних версий могут использоваться прозрачно, как любой другой пакет
или объект типа файл в выражении G-expressions (see G-Expressions). Они
также прозрачно используются в процедуре packages->manifest
, которая
обычно используется в манифестах (see the
--manifest option of guix package
). Так можно вставлять
пакет ранней версии в принципе куда угодно, как если вставлять обычный
пакет: в манифесты, в поле packages
вашего объявления
operating-system
и т.д.
Next: Вызов guix describe
, Previous: Запуск guix time-machine
, Up: Управление пакетами [Contents][Index]