我想要一个mercurial钩子,它将对所有被修改的文件运行JSLint / PyChecker / etc。但是,我无法控制所有的hg客户端,并且希望它在推送到主存储库(我有控制权)时运行,因此主服务器上的pretxnchangegroup挂钩似乎最好。
如何获取将要提交的更改组中的所有更改集的列表?
我似乎有其他解决方案使用预先挂起,但这些对我不起作用,因为客户端可能已经有一个失败的JSLint提交。在这种情况下,他们应该能够在新的提交中修复错误,并能够成功地将(坏的和新的提交)推送到服务器。服务器只需检查每个分支上的最新变更集,即变更组中修改的每个文件。
答案 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钩子的骨架,它遍历变更组中的节点