0

我正在开发一个从 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 日志输出中的摘要字段被“我的评论”覆盖,并且似乎没有任何方法可以找出此变更集添加了哪个标签。

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

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

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

4

1 回答 1

0

hg tags 在 repo 中检查标签的自然方式

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 中的任何(本地创建或从相关 repo 中提取)标签,可以从日志中提取变更集 N+1 的作者身份

于 2013-05-23T14:45:56.393 回答