我正在尝试让 Mercurial 进程内挂钩在 Windows 上运行。
问题不在于如何编写钩子(我想使用现有的钩子,在这种情况下是 BugTracker.Net的用于 Mercurial 集成的钩子 - 我没有找到指向该文件的直接链接,但如果你可以看到它在此处下载 BT.net ,它位于“mercurial”子文件夹中)。
问题是如何告诉 Mercurial 运行它。
我花了很多时间阅读文档,但我现在卡住了。
(具有一定的 Python 知识可能会更容易 - 我没有)
我知道我必须在 hgrc 文件中插入一行(在我的存储库的 .hg 文件夹中)。
HG Book中有一个示例,如下所示:
[hooks]
commit.example = python:mymodule.submodule.myhook
Mercurial 网站上还有另一个示例,如下所示:
[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] Invalid argument
我想这是因为你提到的repo
and参数。ui
那么,这是否意味着钩子脚本被破坏了?
(正如我所说 - 我对 Python 一无所知,这是来自开源 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 邮件列表中询问进一步的建议。
谢谢你的帮助,如果没有你,我可能不会走这么远!