获取Mercurial进程内挂钩以在Windows上运行

时间:2010-07-22 11:12:00

标签: windows mercurial hook mercurial-hook

我正在尝试在Windows上运行一个Mercurial进程内挂钩 问题不在于如何编写钩子(我想使用现有的一个,在这种情况下BugTracker.Net的钩子用于Mercurial集成 - 我没有找到该文件的直接链接,但是你如果您下载BT.net here,可以看到它,它位于“mercurial”子文件夹中。
问题是如何告诉Mercurial运行它。

我花了很长时间阅读文档,但我现在卡住了。
(使用Python的某些知识可能会更容易 - 我没有)

我知道我必须在hgrc文件中插入一行(在我的存储库的.hg文件夹中)。

有一个示例in the HG Book,如下所示:

[hooks]
commit.example = python:mymodule.submodule.myhook

Mercurial site还有另一个例子,它看起来像这样:

[hooks]
changegroup = /path/to/changegrouphook

现在我想要一个“传入”钩子,所以至少我知道我必须这样做:

[hooks]   
incoming.btnet = X

问题是找出“X” 文件名为 hg_hook_for_btnet.py ,在文件中有一行如下所示:

def debug_out(s):

我想这就是“功能”本身的名称 所以我的行需要看起来像这样:

[hooks]   
incoming.btnet = python:hg_hook_for_btnet.debug_out

但是当我按下时,这会给我一个错误消息 [Errno 2]没有这样的文件或目录
我已经尝试了很多不同的变化,但它不起作用,我不知道我做错了什么。

  • 我在开始时是否需要 python:
  • 我是否需要指定文件扩展名 .py
  • 我是否需要 / path / to /...,如Mercurial网站上的示例所示(见上文)?
  • 如果是,路径的正确语法是什么? (只有 c:\ MyRepo \ 不起作用 - Python中的语法必须不同)

另外,我是否将钩子文件放入正确的文件夹中? 现在,它位于我的存储库的主文件夹中(与.hg文件夹处于同一级别)。


编辑:

马丁,我把它变成了这个:

[hooks]
incoming.btnet = python:~c:\HG\MyRepo\hg_hook_for_btnet.py:debug_out

现在我收到一条不同的消息: [Errno 22]参数无效
我想这是因为您提到的repoui参数。

那么,这是否意味着钩子脚本被破坏了? (正如我所说 - 我对Python一无所知,这是来自open source bugtracker的现有钩子脚本)


编辑2:

很抱歉有关进程内和进程分离的混淆 - 我知道存在差异,但我认为如果钩子是用Python编写的,那么它必须是自动进程的(事实证明我错了:-)

好的,根据您编辑的答案中的语法,脚本至少会运行 我安装了Python 2.7(在我在这里提出问题之前已经这样做了)并将脚本中的第一行更改为#!C:\Python27\python.exe
现在我明白了:

running hook incoming.btnet: c:\HG\MyRepo\hg_hook_for_btnet.py
warning: incoming.btnet hook exited with status 1

所以脚本运行,但仍然有一些错误 这似乎是一个与Bugtracker.NET相关的问题,所以我会在BT.NET邮件列表上询问进一步的建议 谢谢你的帮助,如果没有你,我甚至可能不会到目前为止!

1 个答案:

答案 0 :(得分:5)

你应该使用

[hooks]
incoming.btnet = python:~/path/to/hg_hook_for_btnet.py:debug_out

并将debug_out定义为

def debug_out(ui, repo, **kwargs):
    # ...

正如HG书中所解释的那样 - 使用uirepo参数以及一些额外的特定于钩子的参数调用所有钩子。 Mercurial API页面说明了您可以使用uirepo参数执行的操作。


编辑:啊哈......我现在看了the script。它不是作为进程内Mercurial钩子运行的。它被设计为作为单独的进程运行。所以你需要使用

[hooks]
incoming.btnet = c:\HG\MyRepo\hg_hook_for_btnet.py

并确保按照脚本中的说明进行操作:它讨论了如何设置hg.exe二进制文件和Python解释器的路径。后者意味着作者希望您安装Python。脚本中有一个电子邮件地址 - 我建议您直接或通过BugTracker.NET邮件列表联系corey Trager。由于它是一个bug跟踪器,我认为它们有一个适当的位置,你可以报告这个! : - )