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 工具链进行测试。