2012-03-06 8 views
16

Estoy en el proceso de escribir un gancho mercurial changegroup. Todavía no tengo todo resuelto, pero el proceso de prueba y error se hace más doloroso por el hecho de que tengo que seguir comprometiéndome y presionando solo para poner a prueba mi trabajo en progreso.Manera fácil e indolora de probar nuevos ganchos mercuriales (que están en curso)

¿Hay alguna manera de 'falsificar' un disparador para ejecutar mi gancho de grupo de cambio con el estado actual del repositorio que se utilizará para sus parámetros?

Cualquier ayuda para simplificar este proceso sería muy apreciada. Gracias Nick

Respuesta

18

Me temo que no hay capacidades de depuración integradas para esto. Lo que hago al escribir un gancho es configurar dos repositorios locales:

$ hg init repo 
$ hg clone repo clone 

y luego configurar el gancho changegroup en repo. Ahora entra en clone y hacer

$ echo a > a 
$ hg add a 
$ hg commit -m 'a file' 

de configurar clone. Cada vez que quiero comprobar el gancho, corro

$ hg push; hg -R ../repo rollback 

dentro clone. Lo mantengo en mi historial de línea de comandos para que pueda presionar + Devuelva para ejecutarlo una y otra vez. El hg rollback es la clave: se cancela efectivamente el hg push para que pueda repetirlo una y otra vez.

Por supuesto, necesitará ajustar esto según sea necesario para su gancho. Si el gancho comprueba el nombre del confirmador, utilice hg commit -u someone para configurarlo según sea necesario. Si el gancho necesita más de un conjunto de cambios en el grupo de cambios, realice dos o más confirmaciones antes de empujar: la reversión se encargará de eliminar todos los conjuntos de cambios presionados. Si el gancho es ejecutado por hgweb, a continuación, ejecutar

$ hg serve --config 'web.push_ssl=no' --config 'web.allow_push=*' 

en un terminal para servir repo mientras empuja a ella en otro terminal.

+0

¡Gracias, eso simplifica la manera en que lo estaba haciendo de varias maneras! :) –

6

Recientemente estuve escribiendo un gancho de Python para Mercurial usando la API. Para probarlo, hice lo siguiente, después de ejecutar el intérprete de python dentro de la carpeta del repositorio.

from mercurial import ui, hg 
repo = hg.repository(ui.ui(), '.') 
execfile('./myhook.py') 
myhook(repo.ui, repo, 'hash', 'outgoing') 

Dónde myhook es su función de enlace (que se encuentra en myhook.py), hash es el hash del conjunto de cambios que desea probar su gancho con y outgoing es el tipo de gancho.

Si su gancho no se comporta como se esperaba, puede modificar su secuencia de comandos y ejecutar las dos últimas líneas nuevamente para volver a intentarlo.

Cuestiones relacionadas