[英]Mercurial Pre-Commit Hook: How to hook to python program in current directory?
我正在尝试创建一个Mercurial钩子,当提交被推送到主存储库时运行。 我创建了一个python脚本,如下所示:
# commit.py from mercurial import ui, hg from mercurial.i18n import gettext as _ def getV1ID(ui, repo, **kwargs): ui.write("The hook works!!!") v1id = ui.prompt('Enter the VersionOne ID') ui.write('VersionOne ID: '+v1id)
对于每个分支,此commit.py
是重复的,因为它包含在将代码推送到主存储库之前需要运行的机制。 只有那些预推机制通过才能推动推动。 用户可以修改他们的本地commit.py,以便他们只运行这些预推送操作的子集,具体取决于他们所处理的项目,并且每个人可以一次处理多个项目。 因此, commit.py
不能是可以驻留在.hg
文件夹中的全局python脚本。
为了使mercurial运行本地commit.py
,在我的mercurial.ini文件中(在C:\\ Users \\ UserName \\ mercurial.ini中),我添加了以下语句:
[hooks] prechangegroup = python:./commit.py:getV1ID
如果我将它放在.hg
文件夹中,python脚本会运行,但是当我这样做时它不会运行。 任何人都可以帮助我阐明这个问题吗? 非常感谢。
我在Mercurial的IRC上得到了这个解决方案。 正如我的一篇评论中所述,钩子的脚本应该被指定为绝对路径,或者应该是PYTHONPATH中的python模块。 因此, pmezard
对IRC建议我应该有一个调用本地commit.py
的固定脚本。 这可以完成如下所示:
在mercurial.ini
,挂钩一个位于用户家的.hg
目录中的“全局”python脚本,如下所示:
[hooks] preoutgoing = python:%USERPROFILE%\.hg\commit.py:run
' commit.py
脚本, commit.py
看起来像这样:
from mercurial import ui, hg import os class Chdir: def __init__(self, newPath): self.savedPath = os.getcwd() os.chdir(newPath) def __enter__(self): return self def __exit__(self, type, value, traceback): os.chdir(self.savedPath) def run(ui, repo, **kwargs): if kwargs['source'] == 'push': with Chdir(repo.root) as dirchanged: import localcommit sys.exit(localcommit.main(ui, repo, **kwargs))
然后,存储库目录中的localcommit.py
由global
提交脚本运行,因此每个存储库都可以维护自己的自定义提交脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.