2009-09-19 7 views
5

Ich habe mit der Verwendung von Mercurial zur Versionskontrolle meiner Drupal-Projektquelldateien begonnen (ich bin VCS- und Mercurial-Neuling). Die Datenbank ist jedoch immer noch "versionskontrolliert" und verwendet ein Verzeichnis mit veralteten .sql.gz-Dateien.Verwenden von Mercurial-Hooks zum Erstellen/Laden von Datenbankabzügen für die Versionsverwaltung

Was ich möchte ist eine einzelne Datenbank-Dump-Datei irgendwo in meinem Repository, die mit einem aktuellen Dump überschrieben werden würde, wenn die Datenbank ändert, und in die Datenbank importiert, wenn ich auf eine andere Version Rollback.

Ich habe es manuell, und es hat funktioniert. Aber was ich wirklich möchte, ist etwas, das das Dumping/Laden automatisch bei jedem Commit/Update durchführt. Ich würde wirklich bevorzugen, dass es in Mercurial einhaken würde, als etwas Äußerliches wie ein Makefile zu sein, das zuerst die Datenbank ablegt und dann festlegt, da ich gerne mit den Tools von TortoiseHg arbeite und kein weiteres Skript ausführen möchte.

Nun scheint es, dass etwas wie ein mysql .... < dumpfile.sql auf einem update Hook eine einfache Möglichkeit wäre, den Datenbank-Dump nach jedem Update zu laden. Aber was ist mit dem automatischen Dumping?

Es gab eine similar question über SVN Pre-Commit Hook, und die akzeptierte Antwort war, dass es wahrscheinlich eine schlechte Idee ist. Gilt es für Mercurial? Vielleicht würde ein anderer Haken (prechangegroup?) Funktionieren?

EDIT:

Ich möchte darauf hinweisen, dass ich es selbst bin mit, auf meinem lokalen Rechner. Es sollte nicht über einen einzelnen Benutzer hinaus skalieren.

Antwort

5

Es sollte in Ordnung sein, die Datenbank mit einem pre-commit Hook zu entladen. Sei nur vorsichtig, keinen precommit Hook zu verwenden, da es eine andere Sache ist (läuft innerhalb der Transaktion).

Im Allgemeinen wird für jeden Befehl (update, commit, usw.) der Haken pre-<command> ausgeführt, bevor der Befehl ausgeführt wird.

+0

Großartig! Es funktioniert über hg commit einfach gut. Aber ... wenn ich turtoisehg benutze, muss ich zweimal committen (einmal für die Quelldateien und noch einmal für den neu erstellten Datenbank-Dump) ... Würdest du zufällig wissen, wie man das schafft? –

+0

Es bedeutet, dass THG die Dateien auf Dateien beschränkt, von denen angenommen wird, dass sie geändert wurden. Ich kenne THG nicht gut genug, um das zu umgehen (fragen Sie vielleicht in der THG-Mailing-Liste). – tonfa

+0

Danke trotzdem. Ich kann höchstens die Befehlszeile für Commits verwenden. Es ist nicht so schlecht. –

1

Scheint, dass dies eher eine Update-Operation ist. Ich nehme an, dass Sie an der Datenbank arbeiteten, absichtlich das sql-Schema exportieren und festgeschrieben haben. Das Problem tritt auf, wenn jemand anderes von Ihnen (oder einem anderen Ort) aktualisiert oder von Ihnen aktualisiert wird. Mercurial hat eine hook for updates.

Eine Alternative wäre, Ihr eigenes mercurial Plugin/Erweiterung zu erstellen, die tatsächlich Verzeichnis zu Ihrer Datenbank (mysql) sprechen und potenziell nützlichere Informationen bereitstellen kann. Das hängt davon ab, dass Sie ein bisschen Python kennen.

+0

Ich hätte hinzufügen sollen, dass es ein einfaches Ein-Entwickler-Setup ist. Niemand würde von mir aktualisieren oder umgekehrt (ich habe es jetzt hinzugefügt). Auch - ich möchte Dumps auf Updates importieren, aber auch EXPORT-Dumps bei Commits, und da liegt die Schwierigkeit (glaube ich?). Wie für das mercurial Plugin/Erweiterung - ich kenne einige Python (aber nicht Mercurial API). Was kann es mir geben, dass mysqldump/mysql nicht kann? –