当开发人员从他们的本地存储库推送到中央远程仓库时,我想使用mercurial钩子来触发回归构建(在Jenkins中)。
在path / to / repo / .hg / hgrc
中[hooks]
changegroup = python:jenkins.py:trigger_build
和jenkins.py:
def trigger_build(ui, repo, source, hooktype, node, **Kwargs):
...
changeset_to_build = node
...
但是在这种情况下,节点是指变更组中最早的变更集,我想开始构建和测试最近的变更集。我有一个使用的解决方法:
def trigger_build(ui, repo, source, hooktype, node, **Kwargs):
...
changeset_to_build = repo['default'].hex()
...
这会获得适当的变更集,但我不确定这是最好的方法。我缺少一个更标准的习语吗?
由于
答案 0 :(得分:1)
在我看来,repo['default']
始终是默认分支的头部。如果开发人员期望其他分支的构建或默认分支未命名为 default ,则可能会出现问题。
在基于bash和revsets的钩子中,我使用以下内容:
#!/bin/bash
changeset_to_build=$(hg log --rev "heads(${HG_NODE}:)" --limit 1 --template "{node}")
这将是HG_NODE和tip之间没有子变更集的第一个节点;因此,即使更改组没有在默认分支中启动,它也是jenkins应该构建的变更组的负责人。