获取更改组中的更改集列表(mercurial python hook)

时间:2010-09-01 19:28:47

标签: python mercurial hook mercurial-hook

我想要一个mercurial钩子,它将对所有被修改的文件运行JSLint / PyChecker / etc。但是,我无法控制所有的hg客户端,并且希望它在推送到主存储库(我有控制权)时运行,因此主服务器上的pretxnchangegroup挂钩似乎最好。

如何获取将要提交的更改组中的所有更改集的列表?

我似乎有其他解决方案使用预先挂起,但这些对我不起作用,因为客户端可能已经有一个失败的JSLint提交。在这种情况下,他们应该能够在新的提交中修复错误,并能够成功地将(坏的和新的提交)推送到服务器。服务器只需检查每个分支上的最新变更集,即变更组中修改的每个文件。

3 个答案:

答案 0 :(得分:4)

你想要一个pretxnchangegroup钩子是正确的,但是你不想检查所有新版本 - 因为人们会修复你在后续更改集中拒绝的错误,但是如果你要检查所有的更改集,他们的工作将会永远不会被接受!

相反,要么只检查所有头文件中的所有文件,要么使用hg status --rev x:y语法获取已有修订版本和您收到的修订版本之间已更改文件的列表,并仅检查那些文件文件只在最新修订版中。

如果你真的想要所有版本的列表,你在版本1.6中使用了revset(hg help revsets)new,但是你真的只想检查结果,而不是所有的修订版本。< / p>

答案 1 :(得分:3)

我刚刚编写了一个与此完全相同的pretxnchangegroup钩子。如果您想要在当前更改组中更改所有文件,则可以获得这两个命令的输出的并集:

hg status --rev $HG_NODE:

(注意尾随冒号)

hg status --change $HG_NODE

当在同一台机器上的两个存储库之间推送时,第一个命令似乎已足够,但是当推送到远程存储库时,第一个命令将错过更改组中第一个变更集中更改的文件,这是第二个命令的位置进来了。

根据http://www.selenic.com/mercurial/hgrc.5.html,“第一个新变更集的ID位于$ HG_NODE中。”

答案 2 :(得分:0)

我的答案对此有帮助吗? https://stackoverflow.com/a/8615156/1025457

它是一个pretxnchangegroup钩子的骨架,它遍历变更组中的节点