mercurial changegroup hook - 指定最近的节点

时间:2013-06-25 08:54:13

标签: mercurial hook

当开发人员从他们的本地存储库推送到中央远程仓库时,我想使用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()
    ...

这会获得适当的变更集,但我不确定这是最好的方法。我缺少一个更标准的习语吗?

由于

1 个答案:

答案 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应该构建的变更组的负责人。