mercurial - significados - tipos de anillos en una relacion
Mercurial gancho de pre compromiso (3)
¿Cómo puedo configurar un enlace de confirmación previa, que buscará una cadena en los archivos confirmados y, si se encuentra, detener la confirmación?
La respuesta de Ry4an es casi correcta :) pero debe reemplazar "hg export tip" por "hg diff".
tip es el último conjunto de cambios comprometido, pero está interesado en cambios locales no comprometidos, por lo que es lo que necesita. para mis necesidades he añadido lo siguiente a mi hgrc
precommit.removeDebug = hg diff -S | grep -v ''^-'' | (! egrep ''(var_dump)|(exit)|(print_r)'')
el -S incluye subrepos (puede que no sea necesario, y puede que aún tenga 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 imprimirle el archivo y el número de la ocurrencia (ya que se canaliza). Tal vez alguien tiene una mejor manera de hacerlo.
Por cierto, en Windows puedes usar
[hooks]
pretxncommit.nocommit = hg export tip | findstr NOCOMMIT && EXIT /B 1 || EXIT /B 0
Este enlace fallará si sus fuentes contienen la cadena "NOCOMMIT"
El capítulo 10 del libro mercurial cubre esto 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, introducimos un gancho simple de pretxncommit que comprueba si hay espacios en blanco al final. Este gancho es corto, pero no muy útil. Sale con un estado de error si un cambio agrega una línea con espacios en blanco al final a cualquier archivo, pero no imprime ninguna información que pueda ayudarnos a identificar el archivo o la línea ofensiva. También tiene la agradable propiedad de no prestar atención a las líneas no modificadas; Sólo las líneas que introducen nuevos espacios en blanco al final causan problemas.
Simplemente cambie la expresión regular de ''^/+.*[ /t]$''
a la cadena que esté buscando.