2010-03-16 6 views

Répondre

2

Je pense que vous avez raison de dire que le message n'existe pas encore. Si vous utilisez pretxncommit, ce sera le cas, mais je ne suis pas sûr à 100% de ce que cela vous permet de faire à ce stade car la transaction est presque terminée.

+0

Il s'avère que cela fait partie de la réponse (using pretxncommit). Je posterai une réponse avec les détails. – davidavr

8

Il se trouve qu'il ya deux choses de mal à mon approche initiale:

  1. Comme jk a souligné, l'événement se produit precommit avant que la livraison de sorte que les méta-données pour la validation en cours de traitement n'existe pas encore. En utilisant à la place pretxncommit, les métadonnées existent, mais la transaction n'a pas encore été validée dans la base de données.
  2. L'utilisation de changectx = repo[None] vous donne le contexte de modification pour le répertoire de travail. Mais nous voulons les informations pour le commit actuel, donc en utilisant changectx = repo['tip'] nous donne à la place les méta-données les plus récentes.

Notez que si vous utilisez changectx = repo['tip'] avec l'événement precommit, vous allez vraiment obtenir le dernier commit traité, pas celui en cours sur lequel vous travaillez.

+0

Oui, je me suis un peu inquiété à propos de ce livre: "Ce hook peut accéder aux métadonnées associées au presque nouveau changeset, mais il ne doit rien faire de permanent avec ces données, il ne doit pas modifier le répertoire de travail." –

+2

C'est la raison pour laquelle nous vous invitons à poser votre question et à répondre à votre question sur Stack Overflow. Plus d'un an plus tard, cette réponse m'a vraiment aidé car je passais par la [documentation très clairsemée] (http://mercurial.selenic.com/wiki/MercurialApi) disponible pour l'API HG. –

Questions connexes