2010-11-18 21 views
5

J'ai un script qui est dans le niveau supérieur de ma copie de travail et que j'aimerais utiliser comme un crochet Mercurial. Si j'utilise un chemin d'accès absolu au hook alors tout va bien, mais je veux un chemin relatif pour que l'ensemble puisse être facilement déplacé, utilisé dans d'autres copies de travail et que d'autres développeurs puissent copier le hgrc tel quel.Comment utiliser un chemin d'accès relatif à un crochet Mercurial

/space/project/.hg/hgrc contient

[hooks] 
update = genid 

Le script est genid à/espace/projet/genid

Le crochet est invoqué très bien si je suis dans/espace/projet mais si mon répertoire actuel est/space/project/src/tools alors 'hg update' donnera une erreur car le hook ne peut pas être trouvé.

+0

Que se passerait-il si quelqu'un faisait un 'hg update null', effaçant ainsi le répertoire de travail? Lorsque vous avez ensuite essayé d'exécuter une commande 'hg', elle essayait de charger l'extension maintenant inexistante. Bien sûr, cela peut toujours être un problème avec les chemins absolus, mais c'est beaucoup plus probable si le script d'extension est dans le repo sur lequel vous travaillez activement. –

+1

Eh bien, ne faites pas ça alors! Les crochets sont vides par défaut et doivent être ajoutés de manière proactive, donc s'il n'y a pas de copie de travail, n'ajoutez pas le crochet. Ce ne sera pas un problème pour les autres développeurs travaillant sur le projet. –

+1

@TimDelaney qui n'aura pas d'effets catastrophiques - l'exécution du hook échouera simplement mais la validation se produit toujours –

Répondre

2

crochets python ne peut pas utiliser un chemin relatif. Les crochets de script peuvent aimer ceci:

[hooks] 
update = ./genid 
+0

cela fonctionne très bien! – pyfunc

+1

pourriez-vous clarifier - je ne pouvais pas obtenir ce travail. Je veux le répertoire au-dessus du répertoire .hg. Wouldnt ./quelque chose se réfère simplement au répertoire courant? –

+0

* Les hooks Python ne peuvent pas utiliser un chemin relatif * - pourriez-vous s'il vous plaît fournir une référence? –

2

Dans certains cas, les variables d'environnement sont étendues en configuration mercurielle. Vous pouvez donc vérifier si vous pouvez utiliser une variable d'environnement.

[hooks] 
update = $MercurialHooks/genid 

Voir FAQ (12) https://www.mercurial-scm.org/wiki/TipsAndTricks

+0

Aucune variable d'environnement ne pointe vers le référentiel en cours d'exploitation. –

+0

@Roger Binns: Ce que je voulais dire, c'est que vous pouviez le régler et l'utiliser. – pyfunc

+0

Oui, j'ai compris que vous vouliez dire cela. Mais cela ne fonctionnera pas pour mon scénario, par exemple s'il y a des extractions dans plusieurs endroits différents ou si vous déplacez le référentiel dans un répertoire différent. Si vous devez maintenir une variable d'environnement, cela peut aussi bien être $ PATH. Si Mercurial en établissait un tel que $ HG_REPO_DIR alors ce serait merveilleux. –

0

J'ai eu le même problème et je n'ai pas pu le résoudre. La solution de contournement était facile cependant! J'ai versionné le fichier dans le repo et je l'ai simplement copié dans mon dossier .hg! Pas idéal mais il n'est pas susceptible de changer et d'autres utilisateurs de repo peuvent toujours obtenir une copie du fichier