2010-10-27 26 views
3

J'ai une fonction de crochet nommée precommit_bad_branch qui importe hook_utils. Lors de l'appel precommit_bad_branch par un commit je reçois le message d'erreur suivant:Mon crochet Mercurial peut-il appeler du code à partir d'un autre fichier?

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

On dirait que je ne suis pas autorisé à appeler hook_utils de precommit_bad_branch. Le code fonctionne bien si je l'appelle explicitement sans impliquer Mercurial.

Mon crochet peut-il appeler du code à partir d'un autre fichier?

Ma partie crochet hgrc ressemble à ceci:

[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 

Répondre

2

Mettre le répertoire C:\workspaces\hg_hooks dans votre PYTHONPATH et vous serez en mesure d'écrire

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

dans votre fichier de configuration et vous serez également en mesure faire

import hook_utils 

dans n'importe quel fichier Python, y compris t Le fichier next_hooks.py.

Vous pouvez modifier sys.path de next_hooks.py, peut-être avec le code comme ceci:

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

import hook_utils 
+0

Merci, fonctionne comme un charme. Je pensais que c'était quelque chose de sécurité au nom de Mercurials. :-) – MdaG

+0

Non, c'est normal mécanique d'importation Python :) –

+0

chemin d'accès sys ne fonctionne pas pour moi – shabunc