Next: , Previous: , Up: Управление пакетами   [Contents][Index]


5.9 Младшие версии

Примечание: Функциональность, описанная здесь, — это обзор технологии версии 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) предоставляет следующие процедуры для работы с ранними версиями:

Procedure: inferior-for-channels channels [#:cache-directory] [#:ttl]

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, что может занять время.

Procedure: open-inferior directory [#:command "bin/guix"]

Open the inferior Guix in directory, running directory/command repl or equivalent. Return #f if the inferior could not be launched.

Процедуры, приведённые ниже, обеспечивают работу и управление ранними версиями пакетов.

Procedure: inferior-packages inferior

Возвращает список пакетов, относящихся к ранней версии inferior.

Procedure: lookup-inferior-packages inferior name [version]

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.

Procedure: inferior-package? obj

Возвращает true, если объект obj — это пакет ранней версии.

Procedure: inferior-package-name package
Procedure: inferior-package-version package
Procedure: inferior-package-synopsis package
Procedure: inferior-package-description package
Procedure: inferior-package-home-page package
Procedure: inferior-package-location package
Procedure: inferior-package-inputs package
Procedure: inferior-package-native-inputs package
Procedure: inferior-package-propagated-inputs package
Procedure: inferior-package-transitive-propagated-inputs package
Procedure: inferior-package-native-search-paths package
Procedure: inferior-package-transitive-native-search-paths package
Procedure: inferior-package-search-paths package

Эти процедуры являются двойниками метода доступа к записям пакетов (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]