2009-09-19 6 views
5

J'ai commencé à utiliser Mercurial pour contrôler mes fichiers source de projet Drupal (je suis à la fois un novice de VCS et de Mercurial). Cependant, la base de données est toujours "contrôlée par la version" en utilisant un répertoire de fichiers .sql.gz datés. Ce que je veux, c'est avoir un seul fichier de vidage de base de données quelque part dans mon dépôt, qui serait écrasé avec un vidage courant quand la base de données changerait, et importé dans la base de données quand je veux revenir à une autre version.Utilisation de crochets Mercurial pour créer/charger des sauvegardes de bases de données pour le versionnement

Je l'ai fait manuellement, et cela a fonctionné. Mais ce que j'aimerais vraiment, c'est quelque chose qui fait le dumping/chargement automatiquement sur chaque commit/mise à jour. Je préférerais vraiment que ça se connecte à Mercurial plutôt que quelque chose d'externe comme un makefile qui d'abord vide la base de données puis commet, puisque j'aime travailler avec les outils de TortoiseHg, et je n'ai pas envie d'avoir un autre script à exécuter.

Maintenant, il semble que quelque chose comme un mysql .... < dumpfile.sql sur un crochet update serait un moyen facile de charger le vidage de la base de données après chaque mise à jour. Mais qu'en est-il du dumping automatique?

Il y avait un similar question sur le hook de pré-validation de SVN, et la réponse acceptée était que c'est probablement une mauvaise idée. Est-ce que cela s'applique à Mercurial? Peut-être un autre crochet (prechangegroup?) Fonctionnerait?

EDIT:

Je tiens à souligner que je l'utilise moi-même, sur ma machine locale. Il ne devrait pas dépasser un seul utilisateur.

Répondre

5

Il devrait être bien de vider la base de données avec un crochet pre-commit. Veillez juste à ne pas utiliser un crochet precommit, car c'est une chose différente (s'exécute dans la transaction).

En général, pour chaque commande (update, commit, etc.), le hook pre-<command> est exécuté avant l'exécution de la commande.

+0

Super! Cela fonctionne très bien via la validation hg. Mais ... si j'utilise tortoisehg, je dois m'engager à deux reprises (une fois pour les fichiers sources, et une fois de plus pour la sauvegarde de la base de données nouvellement créée) ... Auriez-vous l'occasion de savoir comment contourner cela? –

+0

Hum, cela signifie que THG restreint les fichiers aux fichiers qui, selon lui, ont été changés. Je ne connais pas assez THG pour contourner cela (peut-être demander à THG mailing-list). – tonfa

+0

Merci quand même. Au plus, je peux utiliser la ligne de commande pour les validations. Ce n'est pas si grave. –

1

Cela ressemble plus à une opération de mise à jour. Je présume que vous travaillez sur la base de données, choisissez délibérément d'exporter le schéma sql, et vous vous êtes engagé. Le problème vient quand quelqu'un d'autre met à jour de vous (ou d'un autre endroit) ou vous mettez à jour d'eux. Une alternative serait de créer votre propre plugin mercurial/extension qui peut réellement parler répertoire à votre base de données (mysql) et potentiellement fournir des informations plus utiles. Tout cela dépend de vous en sachant un peu de python.

+0

J'aurais dû ajouter que c'est une simple configuration de développeur unique. Personne ne serait mise à jour de moi ou vice-versa (je l'ai ajouté maintenant). En outre - je voudrais importer des décharges sur des mises à jour, mais également EXPORTER des décharges sur des commits, et là se trouve la difficulté (je pense?). En ce qui concerne le plugin mercurial/extension - je connais un peu de python (mais pas l'API de Mercurial). Qu'est-ce que cela peut me donner que mysqldump/mysql ne peut pas? –

Questions connexes