2010-10-27 8 views
3

У меня есть функция крючка по имени precommit_bad_branch, которая импортирует hook_utils. При вызове precommit_bad_branch с помощью фиксации Я получаю сообщение об ошибке:Возможно ли, чтобы мой крюк Mercurial вызывал код из другого файла?

error: precommit.branch_check hook raised an exception: No module named hook_utils 
abort: No module named hook_utils! 

Похоже, я не разрешили позвонить hook_utils из precommit_bad_branch. Код работает нормально, если я вызываю его явно без привлечения Mercurial.

Возможно ли, чтобы мой крючок вызывал код из другого файла?

мой hgrc крюк часть выглядит следующим образом:

[hooks] 
precommit.branch_check = python:C:\workspaces\hg_hooks\next_hooks.py:precommit_bad_branch 
precommit.debug_code_check = python:C:\workspaces\hg_hooks\common_hooks.py:precommit_contains_debug_code 
preupdate.merge_check = python:C:\workspaces\hg_hooks\next_hooks.py:preupdate_bad_merge 

ответ

2

Поместите каталог C:\workspaces\hg_hooks в вашем PYTHONPATH, и вы будете в состоянии написать

[hooks] 
precommit.branch_check = python:next_hooks.precommit_bad_branch 

в файле конфигурации, и вы также будете иметь возможность

import hook_utils 

внутри любого файла Python, включая t он next_hooks.py файл.

В качестве альтернативы, вы можете изменить sys.path из next_hooks.py, возможно, с помощью следующего кода:

import sys 
import os 
sys.path.append(os.path.dirname(os.path.abspath(__file__))) 

import hook_utils 
+0

Спасибо, работает как шарм. Я думал, что это была вещь безопасности для Mercurials. :-) – MdaG

+0

Нет, это нормальная механика импорта Python :) –

+0

appending sys path для меня не работает – shabunc

 Смежные вопросы

  • Нет связанных вопросов^_^