2009-08-05 10 views
43

Étant très familier avec le flux de travail subversion et le fait que 99,9% du temps mon ordinateur est connecté à Internet, je n'aime pas faire 'hg ci' et 'hg push' séparément.mercurial pousser automatiquement sur chaque validation

Je me souviens que bzr avait une commande 'checkout' qui lierait les commandes 'commit' suivantes pour les valider directement sur le serveur ('push').

Est-ce que mercurial a quelque chose de similaire? PS: Écrire un script shell ou un alias qui exécute 'hg ci $ * & & hg push' serait la dernière chose que je ferais.

+2

Un hook ne fait-il pas le 0,1% de fois que vous voulez commettre sans pousser beaucoup plus fort? –

Répondre

54

Vous pouvez ajouter un hook pour exécuter push après une validation réussie.

EDIT: Je viens de l'essayer et il semble fonctionner correctement. J'ajouté ce qui suit au fichier .hg/hgrc du dépôt que je voulais activer pousser automatique:

[hooks] 
commit.autopush = hg push 

EDIT 2: En outre, vous ne pas à se soucier de quelque chose comme ceci:

  • Vous êtes dans un référentiel que vous ne voulez pas voulez pousser automatiquement.
  • Vous utilisez hg -R ~/another-repo-that-autopushes commit pour valider dans un autre référentiel que appuie automatiquement.
  • Le hook hg push finira-t-il par pousser les changements dans le répertoire courant au lieu de celui dans lequel vous vous engagez?

Non, ce ne sera pas le cas. Selon la page que j'ai liée:

Un hook exécutable est toujours exécuté avec son répertoire courant défini sur le répertoire racine d'un référentiel.

C'est un cas de bordure, mais Mercurial le gère correctement. Pourquoi pas un script?

+1

Le problème avec ce hook est que les commandes mq qui créent des commits temporaires (qnew, qpush, etc.) vont déclencher un push. Utiliser le hook post-commit pourrait être une meilleure idée. – hwiechers

+0

@hwiechers: pouvez-vous donner un exemple de comment écrire un hook post-commit? – max

+10

@max: Au lieu d'utiliser 'commit.autopush = hg push', faites' post-commit.autopush = hg push'. Le hook post-commit s'exécute après la fin de la commande commit. Le hook de validation s'exécute chaque fois qu'un ensemble de modifications est créé dans le référentiel local. Voir http://linux.die.net/man/5/hgrc pour plus de détails. – hwiechers

Questions connexes