Mercurial Commit Hook с основной функцией Python
Я пытаюсь создать сложную зацепку mercurial commit в python. Я также хочу разрешить передавать параметры с помощью 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 [опции] hg: ошибка: нет такой опции: -m". Когда я пытаюсь hg commit --test-dir '/somedir'
Я получаю сообщение об ошибке: "hg commit: option --test-dir not распознан".
Наконец я попытался указать commit = python:/mydir/pythonFile.py:main --test-dir '/somedir'
в конфигурации hgrc, и я получил эту ошибку: "AttributeError: у объекта 'module' нет атрибута 'main --test-dir '/somedir''"
Спасибо за помощь.
1 ответ
Я думаю, что ваша проблема может заключаться в попытке импортировать что-то, что не является частью питона, упакованного с Mercurial. Если вам нужно передать дополнительную информацию в хук, чтобы вы могли настроить ее по-разному для разных репо / веток и т. Д., Вы можете использовать
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)