我正试图在python中创建一个复杂的mercurial提交钩子。我也想被允许使用OptionParser传递参数。以下是我目前所掌握的要点:
.hg/hgrc配置:
[hooks]
commit = python:/mydir/pythonFile.py:main
# using python:/mydir/pythonFile.py doesn't work for some reason either
pythonFile.py:
def main(ui, repo, **kwargs):
from optparse import OptionParser
parser = OptionParser()
parser.add_option('--test-dir', action='store', type="string",
dest='test_dir', default='otherdir/',
help='help info')
(options, args) = parser.parse_args()
# do some stuff here
someFunc(options.test_dir)
if __name__ == '__main__':
import sys
main(sys.argv[0], sys.argv[1], sys.argv[2:])
当我运行hg commit -m 'message'
时,我得到一个错误:"用法:hg[options]hg:error:no such options:-m"。当我尝试hg commit --test-dir '/somedir'
时,我得到一个错误:"hg-commit:option--test-dir not recognized"。
最后,我尝试在hgrc配置中指定commit = python:/mydir/pythonFile.py:main --test-dir '/somedir'
,结果出现以下错误:"AttributeError:'module'对象没有属性'main--test-dir'/somedir''"
谢谢你的帮助。
我认为您的问题可能是试图导入一些不属于用mercurial打包的python的东西。如果你需要的是向挂钩传递额外的信息,这样你就可以为不同的回购/分支等进行不同的配置,你可以使用
param_value= ui.config('ini_section', 'param_key', default='', untrusted=False)
其中ini_section是mercurial.ini/.hgrc文件中[]中的位,param_key是条目的名称所以像这样的东西
[my_hook_params]
test-dir=/somedir
然后使用
test_dir = ui.config('my_hook_params', 'test-dir', default='otherdir/', untrusted=False)