¿Cómo puedo configurar un enganche previo a la confirmación, que buscará una cadena en los archivos confirmados y si se encuentra, detener la confirmación?Mercurial pre commit hook
Respuesta
Chapter 10 de the mercurial book cubre este exactamente:
$ cat .hg/hgrc
[hooks]
pretxncommit.whitespace = hg export tip | (! egrep -q '^\+.*[ \t]$')
$ echo 'a ' > a
$ hg commit -A -m 'test with trailing whitespace'
adding a
transaction abort!
rollback completed
abort: pretxncommit.whitespace hook exited with status 1
$ echo 'a' > a
$ hg commit -A -m 'drop trailing whitespace and try again'
En este ejemplo, se introduce un simple gancho pretxncommit que comprueba con espacios en blanco. Este gancho es corto, pero no muy útil. que sale con un estado de error si un cambio añade una línea con espacios en blanco para cualquier archivo , pero no imprime ninguna información que nos pueda ayudar a identificar el archivo infractor o línea. También tiene la buena propiedad de no prestando atención a las líneas no modificadas; solo líneas que introducen nuevos trazados que causan problemas.
Simplemente cambie la expresión regular de '^\+.*[ \t]$'
a cualquier cadena que esté buscando.
OK, por supuesto, encontré ese ejemplo por el momento, pero ¿cómo funciona? ¿Por qué necesito -> hg export tip y qué devuelve (! egrep -q '^ \ +. * [\ t] $')? – danidacar
FYI, esto no funcionará si no agrega una etiqueta con cada confirmación (es decir, mediante '-A') –
. Este es un terrible ejemplo para la mayoría de los desarrolladores: utiliza un script de shell y egrep. los desarrolladores en la mayoría de los entornos de trabajo se sienten incómodos con estas cosas, con una muy buena aproximación, nadie las usa, además no hay explicación o forma de determinar, p. ¿Qué parámetros se pasan al anzuelo de este ejemplo? – jheriko
La respuesta de Ry4an es casi correcta :) pero debe reemplazar "hg export tip" con "hg diff".
tip es el último conjunto de cambios comprometido, pero le interesan los cambios locales sin compromiso, por lo que diff es lo que necesita. para mis necesidades i añade lo siguiente a mi hgrc
precommit.removeDebug = hg diff -S | grep -v '^-' | (! egrep '(var_dump)|(exit)|(print_r)')
la -S incluye subrepos (maye no necesita, y puede ser aún con errores).
grep -v '^ -' elimina las líneas del diff que indican las líneas que se eliminaron. eliminé el -q así que al menos tengo una idea de qué eliminar, pero desafortunadamente este método no puede imprimir el archivo y el número de referencia de la ocurrencia (ya que está entubada). tal vez alguien tiene una mejor manera de hacerlo.
Respuardo mi respuesta. :) Los cambios locales ya están comprometidos cuando se ejecuta el libro 'pretxncommit'; es después del trabajo pero antes de que se haya comprometido la transacción, por lo que' hg export tip' funciona bien, y se retrotrae cuando el gancho dice no. –
'hg export tip' funciona bien, estoy de acuerdo, pero, basado puramente en mis propias observaciones poco científicas,' hg diff' funciona un poco más rápido. – gzzzur
Por cierto, en Windows puede utilizar
[hooks]
pretxncommit.nocommit = hg export tip | findstr NOCOMMIT && EXIT /B 1 || EXIT /B 0
Este gancho fallará si sus fuentes contiene cadena "NOCOMMIT"
- 1. pre-revprop-change hook falló
- 2. pre-commit code review
- 3. Cómo utilizar git hook pre-commit para detener confirmaciones al maestro
- 4. Pre-commit hook para Git cuando la compilación de Hudson ha fallado
- 5. SVN pre-commit hook para evitar cambios en los subdirectorios de etiquetas
- 6. SVN hook pre-revprop-change no funciona
- 7. Actualización de Wordpress Hook Pre Post
- 8. SVN Error: Commit bloqueado por pre-commit hook (código de salida 1) con salida: Error: n/a (6)
- 9. usando git hook después del commit
- 10. Mercurial Commit Gráficos/Gráficos
- 11. ¿Cómo puedo compartir un commit-hook en mercurial con todos los desarrolladores?
- 12. Git pre-receive hook para iniciar PHP CodeSniffer
- 13. Git pre-push hooks
- 14. Mercurial Hook: cambie un mensaje de confirmación precompromiso
- 15. SVN post-commit hook no ejecuta el archivo
- 16. post commit hook para actualizar un archivo en la versión
- 17. Jenkins Parcial Build/Modular Construir en Commit Hook
- 18. Cambios Mercurial Cherry Picking para commit
- 19. Git gancho pre-commit: obtener la lista de archivos cambiados
- 20. svnsync no funciona: Revprop cambio bloqueado por pre-revprop-change hook
- 21. obtener mensaje de confirmación en git hook
- 22. Mercurial: aplicar "hg pull -u" antes de "hg commit"
- 23. Obtener mercurial "hg commit" para trabajar con Notepad ++
- 24. No puedo ignorar un archivo en Mercurial Commit (TortoiseHG)
- 25. ¿Cómo puedo obligar a mercurial a aceptar un commit vacío
- 26. gancho de pre-recepción GIT
- 27. SVN post-commit hook enviando un mensaje de vuelta al cliente
- 28. Conecte Github a Jenkins asegurado a través de HTTP Post-Commit Hook
- 29. Hook processes
- 30. Subversion Hook
Me parece que iría en contra de concepto de repositorio descentralizada. Su repositorio puede ser clonado en otras máquinas con diferentes sistemas, y su secuencia de comandos puede simplemente no funcionar allí. Tal vez el anzuelo pre-push sería mejor? Estoy interesado en escuchar la respuesta a tu pregunta. –
Tengo un repositorio central donde la gente está presionando. Solo necesito asegurarme de que los compromisos que hice estén limpios antes de presionarlos. – danidacar
Intente comprobar http://www.selenic.com/mercurial/hgrc.5.html#hooks –