#cargo-lock #lock-file #version #cargo #semver

app check-lockfile-intersection

检查两个 Cargo.lock 文件交集的包版本是否相同的工具

1 个不稳定版本

0.1.0 2024 年 5 月 8 日

#760网络编程

MIT/Apache

17KB
317

check-lockfile-intersection

这是一个帮助解决一个非常具体(可能也很少见)问题的工具。如果您恰巧遇到这个问题,您就会知道它了!

问题是这样的:cargo 设计上会忽略库(Cargo.lock)的锁文件,当在更大的应用程序(或一般依赖包)中使用该库时;但这也意味着测试库的人可能会使用与最终用户使用的不同版本的依赖项来测试它。

然而,有时应用程序 确实 想要使用与库测试时相同的依赖项版本 -- semver 是一个美好的幻想,但有很多场景下你想要精确度 -- 就我所知,cargo 并不支持这一点。一些不太好的选项是将库中的版本固定为 =X.Y.Z 约束 -- 这将导致下游冲突,并且也无法处理传递依赖 -- 或者只是手动检查库和应用程序的锁文件并比较它们。

此工具在某种程度上自动化了后者选项。它执行以下操作:

  • 从两个锁文件加载两个包集,无论是来自本地文件路径还是 http(s) URL。
  • 排除您要求排除的任何包(原因见下文)。
  • 排除在剩余的两个集合中都没有出现的任何包。
  • 从指定包/哈希或每个集合中的每个包开始
    • 检查依赖树中的所有包在两个集合中都具有相同的版本。
    • 打印出常见和/或不同包版本的列表,以供检查。
    • 如果它们都相同,则退出 0;如果它们不同,则退出 1。

基本上,所有复杂性和选项都涉及 排除 包,因为 Cargo.lock 文件包含您工作区中所有包的所有依赖项、开发依赖项和功能启用依赖项,而您通常只想考虑其中的一部分。

用法

check-lockfile-intersection[选项] <lockfile_a> <lockfile_b>

ARGS:
    <lockfile_a>
      First lockfile (URL or path)

    <lockfile_b>
      Second lockfile (URL or path)

OPTIONS:
    --pkg-hash-a <hash_a>
      Limit first lockfile to package tree rooted at hash (git commit or crate checksum)

    --pkg-hash-b <hash_b>
      Limit second lockfile to package tree rooted at hash (git commit or crate checksum)

    --pkg-name-a <name_a>
      Limit first lockfile to package tree rooted at package name

    --pkg-name-b <name_b>
      Limit second lockfile to package tree rooted at package name

    --exclude-pkg-a <exclude_a>
      Comma-separated list of packages to exclude from first lockfile

    --exclude-pkg-b <exclude_b>
      Comma-separated list of packages to exclude from second lockfile

    --verbose
      Print more details while running

    -h, --help
      Prints help information.

依赖项

~2.4–3.5MB
~93K SLoC