#cargo #cargo-toml #platform #cargo-metadata #vendor #filtering #directory

bin+lib cargo-vendor-filterer

cargo vendor,但带有平台和更多过滤功能

14 个版本

0.5.14 2024 年 4 月 1 日
0.5.13 2024 年 3 月 25 日
0.5.12 2023 年 9 月 28 日
0.5.11 2023 年 5 月 23 日
0.5.4 2022 年 6 月 23 日

#125Cargo 插件

Download history 460/week @ 2024-04-14 388/week @ 2024-04-21 208/week @ 2024-04-28 199/week @ 2024-05-05 404/week @ 2024-05-12 417/week @ 2024-05-19 259/week @ 2024-05-26 284/week @ 2024-06-02 351/week @ 2024-06-09 514/week @ 2024-06-16 698/week @ 2024-06-23 457/week @ 2024-06-30 181/week @ 2024-07-07 247/week @ 2024-07-14 185/week @ 2024-07-21 196/week @ 2024-07-28

每月下载量 812

Apache-2.0

47KB
907

cargo vendor,但带有过滤功能

核心的 cargo vendor 工具非常有用,可以保存所有依赖项。然而,它不提供任何过滤功能;今天 cargo 包含所有平台,但某些项目可能只关心 Linux,例如。

更多信息: https://github.com/rust-lang/cargo/issues/7058

生成带过滤功能的 vendor 目录

以下是一个基本示例,它会过滤掉所有未针对 Linux 定位的 crate;例如,这将删除只针对 Windows 或 MacOS 的 crate,如 winapi-x86_64-pc-windows-gnucore-foundation

$ cargo vendor-filterer --platform=x86_64-unknown-linux-gnu

您也可以按层级进行过滤

$ cargo vendor-filterer --tier=2

目前这将删除如 redox_syscall 等crate。

您还可以通过 Cargo 元数据 中的 package.metadata.vendor-filter 键声明性地指定所需的 vendor 配置。在这个例子中,我们只包括第 1 和 2 层的 Linux 平台,并额外删除一些 vendored C 源代码

[package.metadata.vendor-filter]
platforms = ["*-unknown-linux-gnu"]
tier = "2"
all-features = true
exclude-crate-paths = [ { name = "curl-sys", exclude = "curl" },
                        { name = "libz-sys", exclude = "src/zlib" },
                        { name = "libz-sys", exclude = "src/zlib-ng" },
                      ]

对于工作空间,使用相应的 工作空间元数据workspace.metadata.vendor-filter

Cargo.toml 中 package.metadata.vendor-filter 的可用选项

  • platforms:rustc 目标三元组的列表;这和例如 cargo metadata --filter-platform 所接受的值相同。你可以指定多个值,并且支持 * 通配符。例如,*-unknown-linux-gnu
  • tier:这可以是 "1" 或 "2"。它除了可以与 platforms 一起指定外,还可以单独指定。
  • all-features:在vendoring时启用当前crate的所有功能。
  • exclude-crate-paths:从目标crate中移除文件和目录。此功能的一个关键用例是当只想支持动态链接时,从 libz-sys 等crate中移除嵌入的C库的vendored副本。

所有这些选项都有相应的CLI标志;请参阅 cargo vendor-filterer --help

生成可重复生成的vendoring tar包

你也可以提供 --format=tar.zstd 来输出通过zstd压缩的可重复的tar存档;默认文件名将是 vendor.tar.zstd。类似地,还有 --format=tar.gz 用于gzip,以及 --format=tar 用于输出未压缩的tar存档,你可以按你喜欢的方式对其进行压缩。强烈建议使用 --prefix=vendor,这在使用例如主目录时会有更少令人惊讶的行为。例如,--prefix=vendor --format=tar.zstd 一起使用。

此选项需要在环境中设置 SOURCE_DATE_EPOCH 或外部 git,并且工作目录必须是git仓库。

使用 --format=tar.zstd 时,目前需要外部 zstd 二进制文件。

此功能使用来自 https://reproducible-builds.org/docs/archives/ 的建议逻辑来输出可重复的存档;换句话说,另一个进程/工具也可以使用与 cargo vendor-filterer 相同的版本来克隆你的项目,并使用相同的 cargo vendor-filterer 版本来重新生成vendoring tar包以进行验证。

依赖关系

~7–18MB
~282K SLoC