我想让一个反复无常的进程内钩子在Windows上运行。
问题不是怎么写钩子
(在这种情况下,我想使用现有的一个
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]没有此类文件或目录
当我推的时候。
我已经尝试了很多不同的变化,但它不起作用,我不知道我做错了什么。
-
我需要
蟒蛇:
开始还是不?
-
我需要指定文件扩展名吗
Py
或不是?
-
我需要
路径/到…
如示例中所示,从Mercurial站点(见上文)?
-
如果是,路径的正确语法是什么?(只是
C: MyRePo\\
不起作用-python中的语法必须不同)
另外,我把钩子文件放进了正确的文件夹吗?
现在,它在我的存储库的主文件夹中(与.hg文件夹处于同一级别)。
编辑:
马丁,我把它改成了:
[hooks]
incoming.btnet = python:~c:\HG\MyRepo\hg_hook_for_btnet.py:debug_out
现在我得到一个不同的信息:
[errno 22]参数无效
我想这是因为
repo
和
ui
你提到的论点。
那么,这是否意味着钩子脚本被破坏?
(如我所说-我对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邮件列表上寻求进一步的建议。
不过,谢谢你的帮助,如果没有你,我可能不会来这么远!