我在Windows 2008 64位和IIS上设置了Mercurial hgweb。存储库的位置是网络共享。
我想在存储库上创建一个钩子,以在更改组上发出“hg update”命令。我无法使用外部挂钩,因为这会启动cmd.exe,并将网络共享作为工作目录(并且cmd.exe不支持网络共享)。
因此,我正在寻找一个调用mercurial命令的python钩子的例子。我注意到有一个mercurial.commands模块,但我在网上找不到任何例子,我对Python不是很有经验。
是否有任何使用Python钩子调用mercurial命令的示例 - 是否可以在hgrc中执行此操作,或者我是否需要外部.py文件?
答案 0 :(得分:3)
您需要一个外部.py
文件用于Python扩展。要使用内部API,就像从命令行调用Mercurial一样,请使用
from mercurial.dispatch import dispatch, request
dispatch(request(['update']))
这是Mercurial 1.9之后的语法。在早期版本中,您将使用
from mercurial.dispatch import dispatch
dispatch(['update'])
传递给request
或dispatch
的列表是命令行中hg
后面的参数。
答案 1 :(得分:3)
受Martin的回答启发,我想我会尝试编写一些Python,这就是我如何设法让它运行起来的。我正在使用Mercurial 2.0.2和mercurial.commands模块(其中,AFAIK,包含在Mercurial Python包中)。
我在服务器上创建了一个myhook.py文件:
import mercurial.commands
def update(ui, repo, **kwargs):
mercurial.commands.update(ui, repo)
然后,在服务器上的.hg / hgrc文件中,我添加了以下内容:
[hooks]
changegroup = python:C:\path\to\my\myhook.py:update
我会更改执行命令的行,专门更新为'tip'。如果你使用命名分支,那么命令将无效。我相信这会更好: commands.update(ui,repo,repo ['tip'])