2010-07-22 36 views
4

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

我花了相当一段时间阅读文档,但我现在卡住了。
(它可能会更容易与一定的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 

该pr问题是找出“X”。
文件名是hg_hook_for_btnet.py和文件中,有一条线,看起来像这样:

def debug_out(s): 

我想这就是“功能”本身的名称。
所以,我行需要是这个样子:

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

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

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

而且,做我把钩子文件到正确的文件夹?
现在,它位于我的存储库的主文件夹中(与.hg文件夹位于同一级别)。


编辑:

马丁,我把它改为这个:

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

现在,我得到不同的信息:[错误22]无效参数
我想这是因为你提到的repoui的论点。

那么,这是否意味着钩子脚本被破坏?
(正如我说 - 我不知道Python的东西,这是从open source bugtracker现有的钩子脚本)


编辑2:

对不起,我在关于混乱 - 进程和单独的进程 - 我知道有一个区别,但我认为如果挂钩是用Python编写的,它必须自动进行(原来我错了:-)

好吧,用sy ntax在您编辑的答案中,脚本至少运行。
我已经安装了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邮件列表进一步的建议。
谢谢你的帮助,虽然没有你,我可能甚至不会来这么远!

回答

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。脚本中有一个电子邮件地址 - 我建议您直接联系Corey Trager或通过BugTracker.NET邮件列表联系。由于它是一个错误跟踪器,我认为他们有一个适当的地方可以报告这个! :-)

+0

我编辑了我的问题,参见上文! – 2010-07-22 13:29:42

相关问题