参考文档

Reader 与 Pins File

从 JSON 锁定结果恢复源码、补丁和具名 Package。

Reader 是源码仓库中的 nix/pins.nix。它读取 schema v2 的 Pins File,将锁定的 Fetcher 参数和真实哈希转换为 Nix 输入。

参数

参数默认值含义
pkgs必需与配置兼容的 Nixpkgs 包集
fileReader 上级目录的 pins.json要读取的 Pins File;通常显式传入
confignull可选的 Pin 配置;用于恢复补丁源码和 Package
let
  pkgs = import <nixpkgs> {};
  pins = import ../nix/pins.nix {
    inherit pkgs;
    file = ./pins.json;
    config = ./pins-config.nix;
  };
in
pins.patchelf.sources.default.src

相对路径依照这个 Nix 文件的位置解析。../nix/pins.nix 是快速开始目录对应的 Reader 路径,其他项目应替换为自己固定的工具源码路径。

返回结构

路径内容
pins.<pin>.version原始锁定 Version
pins.<pin>.sources.<source>.srcNix 源码 derivation;有配置时可包含补丁
pins.<pin>.sources.<source>.hash原始 Fetcher 内容的真实哈希
pins.<pin>.sources.<source>.fetcher持久化的 Fetcher 参数
pins.<pin>.sources.<source>.derived派生哈希属性集,默认 {}
pins.<pin>.sources.<source>.packages.<package>配置恢复的 Package;仅传入 config 时提供

即使只有一个 Source,访问路径仍包含 sources.default。不要使用旧式扁平 pins.<pin>.src 路径。

是否传入配置

只传 file 时,Reader 恢复原始锁定源码,不提供 Package,也不应用声明中的补丁。传入 config 时,用已锁定的版本与哈希重新求值配置,补充 Source 的补丁源码和 Package。

Reader 不重新检查上游版本。只有执行 update 才会更新锁定结果。请一并固定配置、Pins File、Reader 版本和必要的 Nixpkgs 输入。

文件兼容性

当前 Reader 仅接受 schemaVersion = 2。版本不兼容时会报错,不能通过手动改 schema 数字完成迁移。失败记录与更新时的处理语义见更新与选择。