繁体   English   中英

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

[英]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]当我推送时没有这样的文件或目录
我已经尝试了很多不同的变化,但它不起作用,我不知道我做错了什么。

  • 我需要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一无所知,这是来自开源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书中所解释的那样 - 所有钩子都用uirepo参数以及一些额外的钩子特定参数调用。 Mercurial API页面解释了您可以使用uirepo参数执行的操作。


编辑:啊哈......我现在看了剧本 它不是作为进程内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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM