[英]Getting Mercurial in-process hook to run on Windows
我正在尝试在Windows上运行Mercurial进程内挂钩。
问题不在于如何编写钩子(我想使用现有的钩子,在这种情况下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]当我推送时没有这样的文件或目录 。
我已经尝试了很多不同的变化,但它不起作用,我不知道我做错了什么。
另外,我是否将钩子文件放入正确的文件夹中?
现在,它位于我的存储库的主文件夹中(与.hg文件夹位于同一级别)。
编辑:
马丁,我改成了这个:
[hooks]
incoming.btnet = python:~c:\HG\MyRepo\hg_hook_for_btnet.py:debug_out
现在我得到一个不同的信息: [Errno 22]参数无效
我想这是因为你提到的repo
和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邮件列表中询问进一步的建议。
谢谢你的帮助,没有你我甚至可能不会到目前为止!
你应该用
[hooks]
incoming.btnet = python:~/path/to/hg_hook_for_btnet.py:debug_out
并将debug_out
定义为
def debug_out(ui, repo, **kwargs):
# ...
正如HG书中所解释的那样 - 所有钩子都用ui
和repo
参数以及一些额外的钩子特定参数调用。 Mercurial API页面解释了您可以使用ui
和repo
参数执行的操作。
编辑:啊哈......我现在看了剧本 。 它不是作为进程内Mercurial钩子运行的。 它被设计为作为单独的进程运行。 所以你需要使用
[hooks]
incoming.btnet = c:\HG\MyRepo\hg_hook_for_btnet.py
并确保按照脚本中的说明进行操作:它讨论了如何设置hg.exe
二进制文件和Python解释器的路径。 后者意味着作者希望您安装Python。 脚本中有一个电子邮件地址 - 我建议您直接或通过BugTracker.NET邮件列表联系corey Trager。 由于它是一个bug跟踪器,我认为它们有一个适当的位置,你可以报告这个! :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.