如何获取Mercurial变更集创建(或修改)的标记名称?

时间:2013-05-23 03:44:11

标签: mercurial tags

我正在开发一个应用程序,它从Mercurial存储库构建变更集数据库。通过运行 hg log 并解析输出,每隔一段时间读取任何新的更改集。我们需要在存储库中更新数据库中的变更集时添加标记信息。

如果有人通过运行来标记变更集:

hg tag -r 1 mytag

第一个版本是存储库标有 mytag 并且创建了一个新的变更集

如果我现在跑:

hg log -v -l 1 

要获取最新变更集的详细信息,摘要字段会显示“已为变更集b669d03aefa1添加标记mytag”。我可以解析这个并获取标记变更集的标记和哈希的名称。

但是,如果变更集标有注释,例如

hg tag -r 1 mytag -m "my comment"
hg log 输出中的摘要字段会被“我的评论”覆盖,似乎没有任何方法可以找出添加了哪个标记这个变化集。

我查看了 hg log --template 变量,但似乎只有与当前变更集上的变量相关的变量 - 而不是当前变更集添加或修改的变量。

我开始使用 hg annotate .hgtags 的路线。此命令的输出将每个标记映射到创建的版本,但 .hgtags 文件不包括添加到远程存储库的标记,即使在提取和更新后也是如此。

或者,我可以通过定期查询 hg标记的输出并更新变更集来维护标记列表,但是我希望有更高效(或更简单)的方法来获取标签名称直接来自修订版。

1 个答案:

答案 0 :(得分:0)

hg tags 检查回购标签的自然方式

hg tags -v将使您能够区分本地和全局标记

如果您仍想使用hg log变体,可以使用新的Mercurial

hg log --template "{if(tags,'{rev} {tags}\n')}"

输出几乎与hg tags相同,但可以限制为缩短列表

此外,如果新标记仅为更多新变更集添加始终而不是现有标记,则可以使用类似

的内容

hg log -r tip --template "{latesttag}\n"

并且更改输出将意味着“新标记出现在存储库中”

最后的注释

您可以(在某种程度上)检测“谁”和“何时”创建|编辑标签。它不仅仅是命令上的单个命令+ 某些逻辑,而是(用于测试的hg-git存储库)

> hg tags
tip                              598:792955be68dd
0.4.0                            594:a3c3b8077cbe
0.3.4                            572:586b7aa96466
0.3.3                            473:9d44dafbb31c
0.3.2                            443:a9c0b93488d4
0.3.1                            436:556c3c586c4a
0.3.0                            433:fa3edeec7ed1
0.2.6                            377:46d390f404da
0.2.5                            364:bc72dd89c2c9
0.2.4                            358:b53421918a89
0.2.3                            348:5d39b98e5083
0.2.2                            322:a222399a59d7
0.2.1                            278:21ead8190d9c
0.2.0                            269:77d6c9eb02fb
0.1.0                            253:505d7cdca198

> hg log --template "{rev}: {author|person} {date|isodate}\n" .hgtags
595: Augie Fackler 2013-03-24 16:39 -0500
573: Augie Fackler 2012-11-01 09:11 -0500
474: Augie Fackler 2012-08-05 21:11 -0500
444: Augie Fackler 2012-01-27 11:52 -0600
437: Augie Fackler 2011-09-13 18:16 -0500
434: Augie Fackler 2011-09-09 16:17 -0500
378: Augie Fackler 2011-03-01 08:24 -0600
365: Augie Fackler 2010-11-02 08:37 -0500
359: Augie Fackler 2010-08-25 15:45 -0500
349: Augie Fackler 2010-07-05 11:56 -0500
323: Augie Fackler 2010-05-22 22:12 -0500
279: Augie Fackler 2009-12-26 13:46 -0600
270: Augie Fackler 2009-12-26 12:42 -0600
254: Augie Fackler 2009-10-17 20:12 -0400

对于任何(在本地创建或从相关仓库中提取)标记,在变更集N中,可以从日志中提取变更集N + 1