2009-09-19 13 views
5

Comencé a utilizar Mercurial para controlar versiones de mis archivos fuente del proyecto Drupal (soy un novato VCS y Mercurial). Sin embargo, la base de datos todavía está "controlada por la versión" utilizando un directorio de archivos .sql.gz con fecha.Uso de ganchos Mercurial para crear/cargar volcados de bases de datos para el control de versiones

Lo que quiero es tener un único archivo de volcado de base de datos en algún lugar dentro de mi repositorio, que se sobrescriba con un volcado actual cuando la base de datos cambie e importado a la base de datos cuando quiera volver a otra versión.

Lo hice manualmente, y funcionó. Pero lo que realmente me gustaría es algo que haga el dumping/carga automáticamente en cada confirmación/actualización. Realmente preferiría que se enganchara a Mercurial antes que ser algo externo como un archivo MAKE que primero abandona la base de datos y luego se compromete, ya que me gusta trabajar con las herramientas de TortoiseHg, y no tengo ganas de tener otro script para ejecutar.

Ahora, parece que algo como un mysql .... < dumpfile.sql en un gancho update sería una manera fácil de cargar el volcado de la base de datos después de cada actualización. Pero, ¿qué pasa con el vertido automático?

Hubo un similar question sobre el enlace de precompilación de SVN, y la respuesta aceptada fue que probablemente sea una mala idea. ¿Se aplica a Mercurial? Tal vez otro gancho (prechangegroup?) Funcionaría?

EDIT:

debo señalar que estoy usando por mí mismo, en mi máquina local. No debe escalar más allá de un solo usuario.

Respuesta

5

Debería estar bien volcar la base de datos con un gancho pre-commit. Solo tenga cuidado de no utilizar un gancho precommit, ya que es algo diferente (se ejecuta dentro de la transacción).

En general, para cada comando (update, commit, etc.) el gancho pre-<command> se ejecuta antes de que se ejecute el comando.

+0

¡Genial! Funciona a través de hg commit muy bien. Pero ... si utilizo tortoisehg, me tengo que comprometer dos veces (una vez para los archivos de origen y una vez más para el volcado de base de datos recién creado) ... ¿Sabrías cómo evitarlo? –

+0

Hum significa que THG restringe los archivos a los archivos que cree que fueron modificados. No conozco a THG lo suficiente como para evitarlo (tal vez pregunten en la lista de correo de THG). – tonfa

+0

Gracias de todos modos. Como mucho, puedo usar la línea de comando para commits. No es tan malo. –

1

Parece que esto es más una operación de actualización. Supongo que estaba trabajando en la base de datos, eligió deliberadamente exportar el esquema sql y se comprometió. El problema surge cuando otra persona realiza una actualización de usted (o de otra ubicación) o actualiza de ellos. Mercurial tiene un hook for updates.

Una alternativa sería crear su propio plugin/extensión mercurial que pueda realmente hablar del directorio con su base de datos (mysql) y proporcionar potencialmente más información útil. Todo esto depende de que sepas un poco de pitón.

+0

Debería haber agregado que es una configuración simple de un solo desarrollador. Nadie estaría actualizándome o viceversa (lo he agregado ahora). Además, me gustaría importar los volcados en las actualizaciones, pero también los volcados de exportación en las confirmaciones, y ahí radica la dificultad (¿no?). En cuanto al complemento/extensión mercurial, sé algo de python (pero no de la API de Mercurial). ¿Qué puede darme que mysqldump/mysql no pueda? –

Cuestiones relacionadas