Vit*_*con 9 python windows mercurial pre-commit-hook
我正在尝试创建一个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脚本会运行,但是当我这样做时它不会运行.任何人都可以帮助我阐明这个问题吗?非常感谢.
我通过IRC for Mercurial获得了此解决方案。如我的评论之一所述,该挂钩的脚本应指定为绝对路径,或者应在PYTHONPATH中使用python模块。因此,pmezard在IRC上我建议我应该有一个调用local的固定脚本commit.py。可以如下所示进行:
在中mercurial.ini,连接到位于.hg用户家目录中的“全局” python脚本,如下所示:
[hoo] preoutgoing = python:%USERPROFILE%\。hg \ commit.py:run
“全局” python脚本commit.py看起来像这样:
来自汞进口ui,hg
导入操作系统
Chdir类:
def __init __(self,newPath):
self.savedPath = os.getcwd()
os.chdir(newPath)
def __enter __(self):
返回自我
def __exit __(自身,类型,值,回溯):
os.chdir(self.savedPath)
def run(ui,repo,** kwargs):
如果kwargs ['source'] =='push':
与Chdir(repo.root)更改为:
导入本地提交
sys.exit(localcommit.main(ui,repo,** kwargs))
然后localcommit.py,存储库目录中的会由globalcommit-script 运行,因此每个存储库都可以维护自己的自定义commit-script。
| 归档时间: |
|
| 查看次数: |
2973 次 |
| 最近记录: |