gpt4 book ai didi

windows - 让 Mercurial 进程内 Hook 在 Windows 上运行

转载 作者:可可西里 更新时间:2023-11-01 14:07:38 26 4
gpt4 key购买 nike

我正在尝试让 Mercurial 进程内 Hook 在 Windows 上运行。
问题不在于如何编写 Hook (我想使用现有的 Hook ,在本例中为 BugTracker.Net 的 Mercurial 集成 Hook - 我没有找到该文件的直接链接,但你可以看到如果您下载 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

现在我想要一个“传入”钩子(Hook),所以至少我知道我必须这样做:

[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] No such file or directory
我已经尝试了很多不同的变体,但它不起作用,我不知道我做错了什么。

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

另外,我是否将 Hook 文件放入了正确的文件夹?
现在,它位于我存储库的主文件夹中(与 .hg 文件夹在同一级别)。


编辑:

Martin,我把它改成了这样:

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

现在我收到一条不同的消息:[Errno 22] 无效参数
我想这是因为你提到的 repoui 参数。

那么,这是否意味着钩子(Hook)脚本被破坏了?
(如我所说 - 我对 Python 一无所知,这是来自 open source bugtracker 的现有钩子(Hook)脚本)


编辑 2:

对于关于进程内和单独进程的混淆,我深表歉意——我知道这是有区别的,但我假设如果钩子(Hook)是用 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 书中所述——所有 Hook 都使用 uirepo 参数以及一些额外的特定于 Hook 的参数调用。 Mercurial API页面解释了您可以使用 uirepo 参数做什么。


编辑:啊哈...我现在查看了the script .它并非设计为作为进程内 Mercurial Hook 运行。它被设计为作为一个单独的进程运行。所以你需要使用

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

并确保您遵循脚本中的说明:它讨论了设置 hg.exe 二进制文件和您的 Python 解释器的路径。后者意味着作者希望你安装 Python。脚本中有一个电子邮件地址——我建议您直接或通过 BugTracker.NET 邮件列表联系 corey Trager。因为它是一个错误跟踪器,我认为他们有一个合适的地方可以报告这个! :-)

关于windows - 让 Mercurial 进程内 Hook 在 Windows 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3308185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com