开始为Mercurial编写钩子的最佳方法是什么?

时间:2010-09-17 15:30:09

标签: windows-7 mercurial hook

我是Mercurial的新手,想要编写一些钩子来防止某些分支之间的合并等。我正在寻找贯穿整个循环的某种教程。

我查看了API和这些examples,但我仍然感到困惑。通过阅读教程/研讨会,我总是比阅读手册或类似内容更好。

我可以理解示例代码是如何工作的,但是如何让Mercurial识别这些函数呢?

e.g。) 我写过这个,但我不明白如何让Mercurial在提交之前运行代码。

def is_bad_branch_name(ui, repo, **kwargs):
    """
    Checks that a commit is always done on a named branch.
    This function enforces Projectplace's branching convention.
    @return: True if the branch name is invalid.
    @returntype: Boolean
    """
    branch = repo[None].branch()
    branch_names = r'(TT|AZ)(-#)(\d)+(:)[\s\w]*'
    acceptable_branch_names = re.compile(branch_names)
    if not acceptable_branch_names.match(branch):
        ui.warn('invalid branch name %r (use <TT|AZ>-#<number>: <description>)\n')
        return True
    return False

2 个答案:

答案 0 :(得分:1)

让我指出显而易见的唯一原因是我是一个绝望的代表:

Chapter 10. Handling repository events with hooks”在BoS的明确的hg书中。

如果您无法找到想要的特定挂钩,请提出更具体的问题。

快乐的挂钩!

答案 1 :(得分:1)

我已经成功编写并使用了钩子。我发现在线文档缺乏,但这可能也是我的问题。我所做的是研究示例代码和一些试错编码以及在这里提出一些问题。 :)

修改的 为了将来参考,这是Mercurial在提交之前在hgrc中运行上述代码所需的那种行。这是钩子和代码路径的一个部分。

[hooks]
precommit.bad_branch_name = python:/path/to/hook/hook.py:is_bad_branch_name

您想要挂钩的每个功能都需要一行。 “precommit”表示挂钩将在执行提交之前运行。这样,如果挂钩返回True,则将中止提交。 “bad_branch_name”只是一个标识符,你可以在那里输入任何内容。