2010-07-22 20 views
4

J'essaye d'obtenir un hook Mercurial en cours de traitement sous Windows.
Le problème n'est pas comment écrire le crochet (Je veux utiliser un existant, dans ce cas BugTracker.Net le crochet pour l'intégration de Mercurial - Je n'ai pas trouvé de lien direct vers le fichier, mais vous pouvez le voir si vous téléchargez BT.net here, il se trouve dans le sous-répertoire "mercurial").
Le problème est de savoir comment dire à Mercurial de l'exécuter.Obtention du hook in-process Mercurial sous Windows

J'ai passé pas mal de temps à lire la documentation, mais je suis coincé en ce moment.
(il serait probablement plus facile avec une certaine connaissance de Python - que je n'ai pas)

Je sais que je dois insérer une ligne dans le fichier hgrc (dans le dossier .hg de mon dépôt).

Il y a un exemple in the HG Book qui ressemble à ceci:

[hooks] 
commit.example = python:mymodule.submodule.myhook 

Et il y a un autre exemple sur le Mercurial site, il ressemble à ceci:

[hooks] 
changegroup = /path/to/changegrouphook 

Maintenant, je veux un crochet « entrant », donc au moins je sais que je dois faire ceci:

[hooks] 
incoming.btnet = X 

Le pr oblem est de comprendre "X".
Le nom de fichier est hg_hook_for_btnet.py et dans le fichier, il y a une ligne qui ressemble à ceci:

def debug_out(s): 

Je suppose que le nom est lui-même de la « fonction ».
a besoin donc ma ligne à ressembler à quelque chose comme ceci:

[hooks] 
incoming.btnet = python:hg_hook_for_btnet.debug_out 

Mais cela me donne un message d'erreur [Errno 2] Aucun tel fichier ou répertoire quand je pousse.
J'ai déjà essayé beaucoup de variations, mais ça ne marche pas et je ne sais pas ce que je fais de mal.

  • Ai-je besoin python: au début ou non? Dois-je spécifier l'extension .py ou non?
  • Ai-je besoin de /path/to/... comme indiqué dans l'exemple du site Mercurial (voir ci-dessus)?
  • Si oui, quelle est la syntaxe correcte pour le chemin? (Juste c: \ myrepo \ ne fonctionne pas - la syntaxe doit être différent en Python)

Aussi, ai-je mis le fichier crochet dans le dossier approprié?
À l'heure actuelle, il se trouve dans le dossier principal de mon dépôt (au même niveau que le dossier .hg).


EDIT:

Martin, je l'ai changé en ceci:

[hooks] 
incoming.btnet = python:~c:\HG\MyRepo\hg_hook_for_btnet.py:debug_out 

Maintenant, je reçois un autre message: [Errno 22] Invalid argument
Je suppose que cela C'est à cause des arguments repo et ui que vous avez mentionnés. Donc, cela signifie-t-il que le script de crochet est cassé?
(comme je le disais - je ne sais pas quoi que ce soit à propos de Python, c'est un script hook existant à partir d'un open source bugtracker)


EDIT 2:

Désolé pour la confusion en ce qui concerne en -processus et processus séparé - je sais qu'il y a une différence, mais j'ai supposé que si le crochet est écrit en Python, il doit être en processus automatiquement (il s'avère que j'avais tort :-)

D'accord, avec le sy ntax dans votre réponse éditée, le script au moins s'exécute.
J'ai Python 2.7 installé (déjà fait avant que je pose la question ici) et changé la première ligne du script en #!C:\Python27\python.exe.
Maintenant, j'obtiens ceci:

running hook incoming.btnet: c:\HG\MyRepo\hg_hook_for_btnet.py 
warning: incoming.btnet hook exited with status 1 

Donc le script est exécuté, mais il y a encore une erreur.
Cela semble être un problème lié à Bugtracker.NET, donc je vais demander sur la liste de diffusion BT.NET pour plus de conseils.
Merci pour votre aide si, sans vous je ne serais probablement même pas venu si loin!

Répondre

5

Vous devez utiliser

[hooks] 
incoming.btnet = python:~/path/to/hg_hook_for_btnet.py:debug_out 

et définir debug_out comme

def debug_out(ui, repo, **kwargs): 
    # ... 

comme expliqué dans le livre HG - tous les crochets sont appelés avec un ui et un argument repo plus certains spécifiques à crochet supplémentaire arguments. La page Mercurial API explique ce que vous pouvez faire avec les arguments ui et repo.


Edit: Aha ... Je suis maintenant regardé the script. Il n'est pas conçu pour être utilisé comme un crochet Mercurial en cours de fabrication. Il est plutôt conçu pour être exécuté en tant que processus séparé. Donc, vous devez utiliser

[hooks] 
incoming.btnet = c:\HG\MyRepo\hg_hook_for_btnet.py 

et assurez-vous de suivre les instructions dans le script: il parle de la définition du chemin du hg.exe binaire et à votre interpréteur Python. Ce dernier signifie que l'auteur s'attend à ce que vous installiez Python.Il y a une adresse e-mail dans le script - je vous suggère de contacter Corey Trager directement ou via une liste de diffusion BugTracker.NET. Comme c'est un bug tracker, je suppose qu'ils ont un endroit approprié où vous pouvez signaler cela! :-)

+0

J'ai édité ma question, voir ci-dessus! –