2个不稳定版本
0.3.0 | 2022年3月28日 |
---|---|
0.2.0 | 2022年3月28日 |
0.1.0 |
|
#1096 in 开发工具
9KB
125 行
Sloughi
一个微小的crate,用于简化Rust项目中Git钩子的共享和应用。灵感来自Husky。
- 无依赖。
- 无魔法,使用Git的
config core.hooksPath
来设置自定义钩子路径。使用原生的/常规的shell脚本作为git钩子。 - 使用Cargo的构建脚本。
- 与IDE/代码编辑器无关。
- 可自定义的设置。
Sloughi是一种古老的非洲家犬品种(例如阿尔及利亚,我就在那里👋)。
安装
-
将sloughi添加到你的
build-dependencies
(不是dev-dependencies
)[build-dependencies] sloughi = "0.3.0"
-
在项目的根目录下创建一个
build.rs
文件来安装Sloughi(除了Cargo.toml
,不要放在src/
中)use sloughi::Sloughi; fn main() { let _ = Sloughi::new().install(); // This will fail silently. Won't interrupt the build. }
就这样!
下次触发cargo build
(由VSCode触发,或通过运行cargo run
/cargo test
)时,你将注意到创建了一个包含示例pre-commit
钩子的.sloughi
文件夹。
自定义安装
此crate使用构建者模式,你可以在::new()
上链选项来调整安装
let _ = Sloughi::new()
.custom_path(".git_hooks"). // Choose a custom Git hooks relative path (default is ".sloughi")
.ignore_env("CI"). // Ignore setup when `CI` environment variable is set (like in CircleCI ..etc)
.ignore_env("GITHUB_ACTIONS") // Do not run in Github Actions as well
.install();
构建失败
上述build.rs
片段在Sloughi安装失败的情况下不会中断构建(例如,不是git仓库,权限错误等)。它被显式静音,你可以按照自己的方式处理错误,或者只是大喊大叫
Sloughi::new().install().expect("Sloughi install failed");
常见问题解答
为什么使用build.rs
?
货物缺少安装钩子(例如npm中package.json中的
postinstall
),这使得在上游仓库中自动共享git钩子变得具有挑战性。
Cargo的构建脚本是一种优雅且透明的
- 在构建/编译时对项目进行操作的方式。
- 无需额外配置文件和格式即可自定义设置。
当多次运行cargo build会发生什么?
install()
调用是幂等的。它不会修改现有的设置和钩子。
这会减慢我的构建速度吗?
不会
build.rs
本身仅在更改时(默认情况下)进行构建。- 设置将首先检查你是否已经创建了
.sloughi
(或自定义路径)。如果是,它将跳过安装。
它是否在发布模式下运行?
不,发布模式是一个空操作。
待办事项
- 可选功能标志。例如,将常规提交作为pre-commit,将rustfmt作为pre-commit。
- 一个用于管理钩子的可选辅助二进制文件。
- 检查Cargo工作区兼容性。
- 将
uninstall()
调用引入到导出的Sloughi
结构体中。 - 集成测试。