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


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

Примечание: Функциональность, описанная здесь, — это обзор технологии версии aaf4694. Интерфейс может меняться.

Иногда вам может понадобиться перемешивать пакеты из ревизии Guix, которая работает в настоящий момент, с пакетами, доступными в другой ревизии Guix. Основания Guix inferiors позволяют вам получить это, составляя различные ревизии Guix произвольным образом.

Технически работа с ранними версиями — это в целом отдельный процесс Guix, связанный с главным процессом Guix через REPL (see Запуск guix repl). Модуль (guix inferior) позволяет запускать ранние версии и взаимодействовать с ними. Он также предоставляет высокоуровневый интерфейс для обзора и управления пакетами, которые поставляет ранняя версия — ранние версии пакетов.

When combined with channels (see Каналы), inferiors provide a simple way to interact with a separate revision of Guix. For example, let’s assume you want to install in your profile the current guile package, along with the guile-json as it existed in an older revision of Guix—perhaps because the newer guile-json has an incompatible API and you want to run your code against the old API. To do that, you could write a manifest for use by guix package --manifest (see Writing Manifests); in that manifest, you would create an inferior for that old Guix revision you care about, and you would look up the guile-json package in the inferior:

(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) предоставляет следующие процедуры для работы с ранними версиями:

Процедура Scheme: inferior-for-channels channels [#:cache-directory] [#:ttl] Возвращает раннюю версию для списка каналов

channels. Использует кеш в cache-directory, где компоненты могут восстанавливаться через ttl секунд. Эта процедура открывает новое соединение с демоном сборки.

Как побочный эффект, эта процедура может собирать или скачивать подстановки бинарников для channels, что может занять время.

Процедура Scheme: open-inferior directory [#:command "bin/guix"] Открывает раннюю версию Guix в directory,

запустив repl directory/command или эквивалент. Возвращает #f, если ранняя версия не может быть запущена.

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

Процедура Scheme: inferior-packages inferior

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

Процедура Scheme: lookup-inferior-packages inferior name [version] Возвращает сортированный список пакетов ранней версии

inferior, содержащих имя name, поздняя версия - вначале. Если версия version задана, возвращает только пакеты с номером версии, начинающейся с version.

Процедура Scheme: inferior-package? obj

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

Процедура Scheme: inferior-package-name package
Процедура Scheme: inferior-package-version package
Процедура Scheme: inferior-package-synopsis package
Процедура Scheme: inferior-package-description package
Процедура Scheme: inferior-package-home-page package
Процедура Scheme: inferior-package-location package
Процедура Scheme: inferior-package-inputs package
Процедура Scheme: inferior-package-native-inputs package
Процедура Scheme: inferior-package-propagated-inputs package
Процедура Scheme: inferior-package-transitive-propagated-inputs package
Процедура Scheme: inferior-package-native-search-paths package
Процедура Scheme: inferior-package-transitive-native-search-paths package
Процедура Scheme: inferior-package-search-paths package

Эти процедуры являются двойниками метода доступа к записям пакетов (see ссылка на пакет). Большинство из них работают с запросами для ранней версии, из которой происходит package, так что ранняя версия должна оставаться живой, когда вы вызываете эти процедуры.

Пакеты ранних версий могут использоваться прозрачно, как любой другой пакет или объект типа файл в выражении G-expressions (see G-Expressions). Они также прозрачно используются в процедуре packages->manifest, которая обычно используется в манифестах (see the --manifest option of guix package). Так можно вставлять пакет ранней версии в принципе куда угодно, как если вставлять обычный пакет: в манифесты, в поле packages вашего объявления operating-system и т.д.


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