Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取变更组中变更集的列表(mercurial python挂钩)_Python_Mercurial_Hook_Mercurial Hook - Fatal编程技术网

获取变更组中变更集的列表(mercurial python挂钩)

获取变更组中变更集的列表(mercurial python挂钩),python,mercurial,hook,mercurial-hook,Python,Mercurial,Hook,Mercurial Hook,我想要一个mercurial钩子,它将在所有修改的文件上运行JSLint/PyChecker/etc。但是,我不能控制所有的hg客户机,我希望它在主存储库(我有控制权)的推送上运行,因此主存储库上的pretxnchangegroup钩子似乎是最好的 如何获取将要提交的变更组中所有变更集的列表 我看到了其他使用预提交钩子的解决方案,但这些解决方案对我来说不起作用,因为客户机可能已经有一个提交失败了JSLint。在这种情况下,他们应该能够修复新提交中的错误,并且能够成功地将(坏提交和新提交)推送到服

我想要一个mercurial钩子,它将在所有修改的文件上运行JSLint/PyChecker/etc。但是,我不能控制所有的hg客户机,我希望它在主存储库(我有控制权)的推送上运行,因此主存储库上的pretxnchangegroup钩子似乎是最好的

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


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

您想要一个pretxnchangegroup钩子是对的,但是你不想检查所有的新修订——因为人们会修复你在后续变更集中拒绝的错误,但是如果你检查所有变更集,他们的工作将永远不会被接受

取而代之的是检查所有头部中的所有文件,或者使用
hg status--rev x:y
语法来获取您已经拥有的修订和正在接收的tip修订之间的已更改文件列表,并且只检查tip修订中的那些文件


如果你真的想要所有修订的列表,你可以使用版本1.6中新增的revset(
hg help revsets
),但你真的只想检查结果,而不是检查所有的修订。我刚刚编写了一个pretxchangegroup钩子,正好可以做到这一点。如果希望在当前更改组中更改所有文件,可以获得这两个命令输出的并集:

hg status --rev $HG_NODE:
(注意后面的冒号)

在同一台机器上的两个存储库之间进行推送时,第一个命令似乎足够了,但在推送到远程存储库时,第一个命令将丢失在changegroup的第一个变更集中更改的文件,这就是第二个命令的作用


根据“第一个新变更集的ID在$HG_节点中。”

我对这个问题的回答有帮助吗?


它是pretxnchangegroup钩子的骨架,它在changegroup中的节点上迭代

右侧-我只想检查头部,但我想检查在变更集中修改的每个文件的头部,因为文件可能已修改,但不在头部。使用
hg状态--rev x:y
,如何查找
x
y
?钩子似乎只告诉我
y
。而且,这似乎输出了这些日期之间的每一次更改?这包括其他人的提交,而不仅仅是changegroupX中的提交将是您在该分支(无论是命名分支还是匿名分支)中已经拥有的最后一个更改集。您可以从变更前创建的本地克隆组和revsets功能上的union操作符中获取该信息。老实说,尽管您应该像每个人一样检查changegroup上每个
hg heads
中的所有.py文件。效率不算太低。要么代码头部的代码是好的,要么是坏的,间隙变更集中的代码要么仍然存在于头部中进行检查,要么被删除/修复,因此不需要担心。我们有大约1000个js/py文件,在每个头部的每个文件上运行脚本会太慢。这仍然不是一个完整的解决方案
--rev
只需将
$HG_NODE
HEAD
(或工作目录)进行比较,列出所有已更改的文件,不包括其间发生的修订。请考虑以下事项:*用户在默认情况下做出一个提交,这违反了构建:1用户在默认情况下生成新的分支<代码> bar >代码>(Rev <代码> f00 < /代码>)2用户再次检查<代码>默认< /代码>,并在<代码>默认< /代码>中提交一个文件,该文件中断了文件<代码>一个.pY(Rev <代码> f01 )3用户再次签出
bar
,并在文件
two.py
(rev
f02
hg status--rev$hg\u NODE&
hg status--change$hg\u NODE`中进行无辜提交,现在只报告在
f00
中所做的更改,以及
f00
f02
之间的差异。由于
one.py
在两者中都是相同的,所以它不会被报告,而
default
则会被打断。同样,这个评论系统令人沮丧。我不确定我是否理解你的意思——你是说将bar中的更改推送到一个中央服务器会成功,而默认错误应该会阻止这一点?如果是这样,这是出于设计——如果我在酒吧工作,为什么默认设置中的随机更改会阻碍我的推送?当有人推默认值时,脚本将捕获这些错误。哇-我明白你对评论系统的意思了。我不知道如何插入诸如换行符之类的高级格式字符。。。但如果我误解了你对这个系统的抱怨,我道歉。我错过了什么?
hg status --change $HG_NODE