Next: Вызов guix describe, Previous: Вызов guix time-machine, Up: Управление пакетами [Contents][Index]
Примечание: Функциональность, описанная здесь, — это обзор технологии версии 1.3.0.17171-a1632. Интерфейс может меняться.
Иногда вам может понадобиться перемешивать пакеты из ревизии 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 Вызов guix package). В этом манифесте вы создадите описание
ранней версии той предыдущей ревизии 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)
предоставляет следующие процедуры для работы с
ранними версиями:
channels. Использует кеш в cache-directory, где компоненты могут восстанавливаться через ttl секунд. Эта процедура открывает новое соединение с демоном сборки.
Как побочный эффект, эта процедура может собирать или скачивать подстановки бинарников для channels, что может занять время.
запустив repl directory/command
или
эквивалент. Возвращает #f
, если ранняя версия не может быть запущена.
Процедуры, приведённые ниже, обеспечивают работу и управление ранними версиями пакетов.
Возвращает список пакетов, относящихся к ранней версии inferior.
inferior, содержащих имя name, поздняя версия - вначале. Если версия version задана, возвращает только пакеты с номером версии, начинающейся с version.
Возвращает true, если объект obj — это пакет ранней версии.
Эти процедуры являются двойниками метода доступа к записям пакетов (see ссылка на пакет). Большинство из них работают с запросами для ранней версии, из которой происходит 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]