#commit #git-repository #repo #mercurial #time #arguments #revset

bin+lib gitrevset

一个用于在git仓库中选取提交的领域特定语言。类似于Mercurial的revset。

2个不稳定版本

0.2.0 2020年10月18日
0.1.0 2020年9月4日

#8#mercurial

GPL-2.0-only

140KB
4K SLoC

gitrevset

Documentation Build Status

一个用于在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