19 个版本 (8 个稳定版)
使用旧 Rust 2015
1.5.0 | 2020年1月21日 |
---|---|
1.4.0 | 2019年5月22日 |
1.3.0 | 2019年1月24日 |
1.2.1 | 2018年12月13日 |
0.3.1 | 2018年10月7日 |
#80 在 Cargo 插件
28,886 每月下载
在 260 个包中使用了 (257 个直接使用)
12KB
283 行
Husky for Cargo 🐶
cargo-husky 是一个由 cargo 管理的 Rust 项目包。简而言之,cargo-husky 是 husky 的 Rust 版本。
cargo-husky 是一个开发工具,用于在 cargo test
上自动设置 Git 钩。通过挂钩 pre-push
并自动运行 cargo test
,它可以防止有问题的代码被推送到远程仓库。
使用方法
请将 cargo-husky
包添加到项目的 [dev-dependencies]
部分。
[dev-dependencies]
cargo-husky = "1"
然后在项目目录中运行测试。
$ cargo test
检查 Git 钩是否在 .git/hooks/pre-push
中生成。cargo-husky 默认会生成一个钩子脚本,该脚本会运行 cargo test
。
例如:
#!/bin/sh
#
# This hook was set by cargo-husky v1.0.0: https://github.com/rhysd/cargo-husky#readme
# Generated by script /path/to/cargo-husky/build.rs
# Output at /path/to/target/debug/build/cargo-husky-xxxxxx/out
#
set -e
echo '+cargo test'
cargo test
注意:cargo-husky 在以下情况下不会执行 cargo test
- 钩子脚本已经被同一版本的 cargo-husky 生成
- 其他人已经放置了另一个钩子脚本
要卸载 cargo-husky,请从您的 [dev-dependencies]
中移除 cargo-husky
,并从 .git/hooks
中移除钩子脚本。
自定义行为
可以通过 cargo-husky
包的特征标志来自定义 cargo-husky 的行为。您可以在 Cargo.toml
的 [dev-dependencies.cargo-husky]
部分中指定它们,而不是将其添加到 [dev-dependencies]
部分。
例如:
[dev-dependencies.cargo-husky]
version = "1"
default-features = false # Disable features which are enabled by default
features = ["precommit-hook", "run-cargo-test", "run-cargo-clippy"]
此配置生成 .git/hooks/pre-commit
脚本,该脚本会运行 cargo test
和 cargo clippy
。
所有功能如下
功能 | 描述 | 默认 |
---|---|---|
run-for-all |
将 --all 选项添加到命令中,以便在工作空间中的所有 crate 中运行它 |
启用 |
prepush-hook |
生成 pre-push 钩子脚本 |
启用 |
precommit-hook |
生成 pre-commit 钩子脚本 |
禁用 |
postmerge-hook |
生成 post-merge 钩子脚本 |
禁用 |
run-cargo-test |
在钩子脚本中运行 cargo test |
启用 |
run-cargo-check |
在钩子脚本中运行 cargo check |
禁用 |
run-cargo-clippy |
在钩子脚本中运行 cargo clippy -- -D warnings |
禁用 |
run-cargo-fmt |
在钩子脚本中运行 cargo fmt -- --check |
禁用 |
user-hooks |
请参阅下面章节 | 禁用 |
用户钩子
如果 run-cargo-test
或 run-cargo-clippy
功能生成的钩子脚本不足以满足您的需求,您可以创建自己的钩子脚本,并告诉 cargo-husky 将它们放入 .git/hooks
目录。
- 在放置
.git
目录相同的目录中创建.cargo-husky/hooks
目录。 - 创建
pre-push
、pre-commit
等钩子文件,如您所愿。 - 为文件设置可执行权限(在 *nix 操作系统上)。
- 将
features = ["user-hooks"]
写入您的[dev-dependencies.cargo-husky]
部分Cargo.toml
。 - 通过删除现有的
target
目录并运行cargo test
来检查它是否正常工作。
例如:
your-repository/
├── .git
└── .cargo-husky
└── hooks
├── post-merge
└── pre-commit
[dev-dependencies.cargo-husky]
version = "1"
default-features = false
features = ["user-hooks"]
cargo-husky 在 .git/hooks/
中插入信息头,以便检测自版本更新。
请注意,当启用 user-hooks
功能时,其他所有功能都会被禁用。您需要准备 .cargo-husky/hooks
目录中的所有钩子。
忽略安装钩子
如果您出于某种原因不想安装钩子,请设置 $CARGO_HUSKY_DONT_INSTALL_HOOKS
环境变量。
CARGO_HUSKY_DONT_INSTALL_HOOKS=true cargo test
工作原理
husky 利用 npm 的钩子脚本,但 cargo 没有提供这样的钩子。相反,cargo-husky 通过 cargo 的构建脚本功能 自动在运行测试时设置 Git 钩子。
构建脚本旨在用于构建第三方非 Rust 代码,如 C 库。它们在编译 crate 时自动运行。
如果将 cargo-husky
crate 添加到 dev-dependencies
部分,则在运行测试时进行编译。在此期间,构建脚本 将运行并自动设置 Git 钩子。构建脚本根据由 cargo
自动设置的 $OUT_DIR
环境变量找到 .git
目录以放置钩子。
cargo-husky 只为同一版本放置一次 Git 钩子文件。当它更新到新版本时,它会通过检测自身已更新来覆盖现有的钩子。
cargo-husky 在 macOS 上开发,并在 Linux/macOS/Windows 上使用 'stable' 频道 Rust 工具链进行测试。