0

我正在尝试在 python 中创建一个复杂的 mercurial 提交挂钩。我还希望被允许使用 OptionParser 传递参数。这是我到目前为止的要点:

.hg/hgrc 配置:

[hooks]
commit = python:/mydir/pythonFile.py:main
# using python:/mydir/pythonFile.py doesn't work for some reason either

python文件.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 [选项] hg:错误:没有这样的选项:-m”。当我尝试时,hg commit --test-dir '/somedir'我得到一个错误:“hg commit: option --test-dir notrecognized”。

最后,我尝试commit = python:/mydir/pythonFile.py:main --test-dir '/somedir'在 hgrc 配置中指定,但出现此错误:“AttributeError: 'module' object has no attribute 'main --test-dir '/somedir''”

谢谢您的帮助。

4

1 回答 1

1

我认为您的问题可能在于尝试导入不属于 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)
于 2013-02-22T16:20:50.700 回答