参考文档
Reader 与 Pins File
从 JSON 锁定结果恢复源码、补丁和具名 Package。
Reader 是源码仓库中的 nix/pins.nix。它读取 schema v2 的 Pins File,将锁定的 Fetcher 参数和真实哈希转换为 Nix 输入。
参数
| 参数 | 默认值 | 含义 |
|---|---|---|
pkgs | 必需 | 与配置兼容的 Nixpkgs 包集 |
file | Reader 上级目录的 pins.json | 要读取的 Pins File;通常显式传入 |
config | null | 可选的 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>.src | Nix 源码 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 数字完成迁移。失败记录与更新时的处理语义见更新与选择。