2个不稳定版本
0.2.0 | 2020年10月18日 |
---|---|
0.1.0 | 2020年9月4日 |
#8 在 #mercurial
140KB
4K SLoC
gitrevset
一个用于在git仓库中选取提交的领域特定语言。类似于 Mercurial的revset。
请参阅crate文档以了解支持的函数和运算符。可能会随着时间的推移添加更多功能。
gitrevset
提供了Rust库接口。还有一个简单的命令行工具git-revs
。它接受revset表达式作为参数,并输出提交哈希。
示例
Revset 表达式
当前提交(HEAD)及其父提交
. + .^
HEAD和origin/master的合并基(公共祖先)
gca(., origin/master)
当前本地(草案)分支的底部
roots(draft() & ::.)
100天前打标签的提交
tag() & date("since 100 days ago")
在"dev"但不在"master"分支中由"alice"或"bob"提交的提交
(dev % master) & (author(alice) | author(bob))
使用gitrevset
库
在运行时从字符串中解析revset。执行它并迭代Oid
use gitrevset::{Repo, SetExt};
let repo = Repo::open_from_env()?;
let set = repo.revs("(draft() & ::.)^ + .")?;
for oid in set.to_oids()? {
dbg!(oid?)
}
在编译时解析。与字符串或计算集合等局部变量交互
use gitrevset::{ast, Repo};
let repo = Repo::open_from_env()?;
let master = "origin/master";
let stack = repo.revs(ast!(only(".", ref({ master }))))?;
let head = repo.revs(ast!(heads({ stack })))?;
使用git-revs
CLI
git revs "(draft() & ::.)^ + ."
配置
可以在git配置中定义自定义revset别名或函数
[revsetalias]
d = draft()
f = ancestor($1, origin/master):$1
然后可以在git-revs
或使用repo.anyrevs
API中使用它们。
git revs "f(d)"
依赖项
~19–31MB
~551K SLoC