我正在开发一个应用程序,它从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标记的输出并更新变更集来维护标记列表,但是我希望有更高效(或更简单)的方法来获取标签名称直接来自修订版。
答案 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