4 个版本 (2 个重大更改)
0.3.0 | 2023 年 8 月 2 日 |
---|---|
0.2.1 | 2023 年 1 月 13 日 |
0.2.0 | 2022 年 5 月 4 日 |
0.1.0 | 2022 年 4 月 6 日 |
#880 in 编码
90KB
2K SLoC
nix-nar-rs
操作 Nix 存档(nar)文件的库和二进制程序
库使用方法
有关详细信息,请参阅 文档。
编码
要将目录编码为 NAR 文件,首先使用 Encoder::new
创建一个 Encoder
,然后将其视为一个 std::io::Read
实例。例如,您可以将其 std::io::copy
到文件中。
use nix_nar::Encoder;
let mut enc = Encoder::new("some/dir")?;
let mut nar = File::create("output.nar")?;
io::copy(&mut enc, &mut nar)?;
解码
要解码 NAR 文件,首先使用 Decoder::new
创建一个 Decoder
,然后调用 Decoder::entries
来遍历存档中的文件。
use nix_nar::Decoder;
let input = include_bytes!("../test-data/02-empty-file.nar");
let dec = Decoder::new(&input[..])?;
for entry in dec.entries()? {
let entry = entry?;
println!("{:?} {:?}", entry.path, entry.content);
}
限制
仅支持 UTF-8 编码的路径。实际上,这不应成为 *nix 或 Windows 应用的限制。
Windows 部分支持——应该可以构建一切。但是,由于 Windows 与 Unix 不同地处理符号链接和文件权限,在一个平台上创建 NAR 并在另一个平台上提取它可能不会达到您预期的效果。
命令行使用方法
nix-nar
命令行工具尽可能与 nix nar
匹配。它具有相同的子命令、选项和输出。
错误消息的措辞有一些差异,并且 --directory
标志对 ls
子命令不支持(因为我认为它在 nix nar
中没有合理的语义)。
USAGE:
nix-nar <SUBCOMMAND>
OPTIONS:
-h, --help Print help information
-V, --version Print version information
SUBCOMMANDS:
cat Print the contents of a file inside a NAR file on stdout
dump-path Serialise a path to stdout in NAR format
help Print this message or the help of the given subcommand(s)
ls Show information about a path inside a NAR file
安装
库
将以下内容添加到您的 Cargo.toml
nix-nar = "0.2"
二进制程序
您可以通过 Cargo 或通过 nix flake 安装二进制程序
$ cargo install nix-nar-cli
$ nix shell gitlab:abstract-binary/nix-nar-rs # temporarily
$ nix profile add gitlab:abstract-binary/nix-nar-rs # permanently
参考资料
- "Eelco Dolstra 的《纯粹函数式部署模型》",图 5.2(第 93 页)
- https://nixos.org/manual/nix/unstable/command-ref/new-cli/nix3-nar.html
许可协议
此软件根据 Apache-2.0 和 LGPL-2.1-or-later 许可协议双许可。
Apache 2.0
Copyright 2022 Alexandru Scvortov
Licensed under the Apache License, Version 2.0 (the "License"); you
may not use this file except in compliance with the License. You may
obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied. See the License for the specific language governing
permissions and limitations under the License.
GNU Lesser General Public License 2.1 或更新版本
Copyright (C) 2022 Alexandru Scvortov
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 2.1 of the License, or (at your option)
any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
依赖项
~2.4–3.5MB
~62K SLoC