【发布时间】:2013-05-18 07:17:43
【问题描述】:
我正在开发一个从 Mercurial 存储库构建变更集数据库的应用程序。通过运行 hg log 并解析输出,每隔一段时间就会读取任何新的变更集。当它们在存储库中更新时,我们需要将标签信息添加到数据库中的变更集。
如果有人通过运行标记变更集:
hg tag -r 1 mytag
第一个修订版是用 mytag 标记存储库并创建新的变更集
如果我现在运行:
hg log -v -l 1
要获取最新变更集的详细信息,summary 字段会显示“Added tag mytag for changeset b669d03aefa1”。我可以解析它并获取标记的变更集的标记和哈希的名称。
但是,如果变更集带有注释标记,例如
hg tag -r 1 mytag -m "my comment"
hg 日志 输出中的 summary 字段被“我的评论”覆盖,并且似乎没有任何方法可以找出哪个标签已添加这个变更集。
我查看了 hg log --template 变量,但似乎只有与当前变更集上的标签相关的变量 - 而不是当前变更集添加或修改的标签。
我开始使用 hg annotate .hgtags。此命令的输出将每个标签映射到创建的修订版,但是 .hgtags 文件不包括添加到远程存储库的标签,即使在拉取和更新之后也是如此。
另外,我可以通过定期查询 hg tags 的输出并随着这些更改更新变更集来维护标签列表,但是我希望有更有效(或更简单)的方法来获取直接来自修订版的标签名称。
【问题讨论】:
-
为每个变更集创建标签看起来不正确。您能否详细说明导致您这样做的原因?为什么不使用 changesetid 作为主键?
-
我没有为每个变更集创建标签。我们的应用程序(一个持续集成应用程序)显示存储库中的变更集表。我需要为每个变更集行显示任何标签。我们目前每 30 秒轮询一次存储库,并使用 hg log 检索最新的变更集。出于性能原因,我们只获取最新的变更集,因为我们需要支持的存储库非常大。
-
一些变更集是针对标签的。该标签可能位于我们数据库中已经存在的先前变更集上。我需要能够获取由当前变更集更新的标签名称以及已标记的变更集的修订号。如何将其存储在数据库中并不重要,但我们有一张以 changesetid 作为主键的变更集表和另一张以 changesetid 作为外键的变更集表。
-
每次我们轮询存储库并更新完整的changestags表时,使用hg标签来检索标签的完整列表可能最终成为唯一的解决方案。然而,我希望找到一种方法来直接从修订中获取标签名称,因为这将更有效,并且适合我们用于从我们支持的其他存储库类型(例如 Git)中检索标签的工作流程。