2010-10-01 39 views
0

J'ai écrit deux fonctions dans un fichier commit_hooks.py que je veux exécuter avant que tout commit ne soit rendu persistant, mais je n'arrive pas à comprendre comment écrire mon hgrc pour les détecter.Comment écrire mon hgrc pour que Mercurial détecte mes hameçons?

Les en-têtes de fonction sont:

def precommit_bad_merge(ui, repo, parent1=None, parent2=None, **kwargs): 
... 

def precommit_bad_branching(ui, repo, **kwargs): 
... 

J'ai essayé d'utiliser ce "guide", mais la documentation est aussi "l'homme PageY" pour moi. Ce qui suit est un banni qui ne fonctionne pas.

[hooks] 
precommit = ..\..\mno2\commit_hooks.py 

Mettre à jour! Réécrire la ligne de crochet:

precommit = D:\environments\next\mno2\commit_hooks.py 

faire Mercurial détecter le crochet de se engager au préalable, mais il sort toujours avec le statut 1 pour une raison quelconque.

+0

-1 pour l'échec du premier point dans [How to Ask] (http://stackoverflow.com/questions/ask-advice). –

+0

À l'exception des pages de manuel Linux, la documentation concernant les hooks Mercurial a manqué, c'est le moins qu'on puisse dire. Avec le recul, j'aurais dû être capable de le comprendre moi-même en lisant le guide, mais le manque d'exemples m'a laissé perplexe. – MdaG

Répondre

2

Configurez votre section [hooks] comme ceci:

[hooks] 
precommit.foo = python:D:\environments\next\mno2\commit_hooks.py:precommit_bad_merge 
precommit.bar = python:D:\environments\next\mno2\commit_hooks.py:precommit_bad_branching 

La syntaxe de la ligne precommit que vous avez utilisé est pour les crochets extérieurs, il a été le traitement de votre fichier python comme un script autonome (qui Je suppose que ce n'est pas le cas puisque vous utilisez les signatures de fonctions pour les hooks en cours de processus).

Vous devrez peut-être avoir l'exécutable python dans votre chemin (je le fais).

Pour plus d'informations, voir la section du guide définitif sur in-process hooks; il y a des informations utiles cachées dans les commentaires.

+0

Merci qui a bien fonctionné! :-) Cela ne marche pas dans Eclipse mais dans le plugin MercurialEclipse (j'ai juste l'accès refusé), mais c'est un autre problème, probablement dû à l'espace de travail Eclipse sur mon ordinateur local et le code source sur un serveur distant. – MdaG

0

La documentation "man PageY" a une section sur la syntaxe crochet python:

La syntaxe de crochets Python est comme suit:

hookname = python:modulename.submodule.callable 
hookname = python:/path/to/python/module.py:callable 

crochets de Python sont exécutés dans le processus Mercurial . Chaque hook est appelé avec au moins trois arguments: un objet ui (mot-clé ui), un référentiel objet (mot-clé repo), et un mot-clé qui indique quel type de hook est utilisé. Les arguments listés sous variables d'environnement ci-dessus sont passés en argument , sans préfixe HG_ , et les noms en minuscules.

Si un pointeur Python renvoie une valeur "true" ou déclenche une exception, il s'agit d'un échec .