2010-10-27 27 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_utilsprecommit_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文件。

或者,你可以从next_hooks.py修改sys.path,也许这样的代码:

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

import hook_utils 
+0

谢谢,工程就像一个魅力。我认为这是Mercurials的一些安全事情。 :-) – MdaG 2010-10-27 12:30:51

+0

不,这是正常的Python导入机制:) – 2010-10-28 06:59:43

+0

追加sys路径不适用于我 – shabunc 2014-08-14 12:41:53

相关问题