Usando ganchos mercuriais para criar/carregar dumps de banco de dados para versionamento
-
11-09-2019 - |
Pergunta
Comecei a usar o Mercurial para controlar a versão dos meus arquivos de origem do projeto Drupal (sou um novato no VCS e Mercurial). No entanto, o banco de dados ainda está "controlado por versão" usando um diretório de arquivos .sql.gz datados.
O que eu quero é ter um único arquivo de despejo de banco de dados em algum lugar do meu repositório, que seria substituído por um despejo atual quando o banco de dados mudar e importado para o banco de dados quando eu quiser reverter para outra versão.
Eu fiz isso manualmente, e funcionou. Mas o que eu realmente gostaria é de algo que faça o dumping/carregamento automaticamente em cada confirmação/atualização. Eu realmente preferiria que isso se conectaria ao Mercurial do que ser algo externo como um makefile que primeiro despeja o banco de dados e depois se compromete, já que gosto de trabalhar com as ferramentas do Tortoisehg, e não sinto vontade de ter outro script para correr.
Agora, parece que algo como um mysql .... < dumpfile.sql
em um update
O gancho seria uma maneira fácil de carregar o despejo de banco de dados após cada atualização. Mas e o dumping automático?
Havia um pergunta semelhante Sobre o gancho de pré-compromisso da SVN, e a resposta aceita foi que provavelmente é uma má idéia. Isso se aplica ao Mercurial? Talvez outro gancho (prechangegroup
?) podia funcionar?
EDITAR:
Devo ressaltar que estou usando isso sozinho, na minha máquina local. Não deve escalar além de um único usuário.
Solução
Deve ser bom despejar o banco de dados com um pre-commit
gancho. Apenas tenha cuidado para não usar um precommit
Hook, já que é uma coisa diferente (corre dentro da transação).
Em geral, para cada comando (update
, commit
, etc.) o pre-<command>
O gancho é executado antes da execução do comando.
Outras dicas
Parece que essa é mais uma operação de atualização. Presumo que você estava trabalhando no banco de dados, escolhem deliberadamente exportar o esquema SQL e se comprometeram. O problema ocorre quando alguém atualiza de você (ou de algum outro local) ou você atualiza a partir deles. Mercurial tem um gancho para atualizações.
Uma alternativa seria criar seu próprio plug -in/extensão mercurial que pode realmente conversar sobre o diretório do seu banco de dados (MySQL) e potencialmente fornecer informações mais úteis. Tudo isso depende de você conhecer um pouco de Python.