2010-11-18 3 views
5

Tengo un script que está en el nivel superior de mi copia de trabajo y me gustaría usarlo como un gancho Mercurial. Si utilizo un nombre de ruta absoluto para el enlace, todo está bien, pero quiero un nombre de ruta relativo para que todo pueda moverse fácilmente, se use en otras copias de trabajo y otros desarrolladores puedan copiar el hgrc tal como está.Cómo usar un nombre de ruta relativo a un gancho Mercurial

/space/project/.hg/hgrc contiene

[hooks] 
update = genid 

El guión está en GenID/espacio/proyecto/GenID

El gancho se invoca muy bien si estoy en/espacio/proyecto pero si mi directorio actual es/space/project/src/tools, entonces 'hg update' dará un error ya que no se puede encontrar el enlace.

+0

¿Qué pasaría si alguien hiciera una 'hg update null', borrando así el directorio de trabajo? Cuando intente ejecutar cualquier comando 'hg', intentará cargar la extensión que ahora no existe. Por supuesto, esto todavía puede ser un problema con rutas absolutas, pero es mucho más probable si el script de extensión está en el repositorio en el que está trabajando activamente. –

+1

¡Bueno, no hagas eso entonces! Los ganchos están vacíos de manera predeterminada y deben agregarse proactivamente, de modo que si no va a haber una copia de trabajo, no agregue el gancho. Esto no será un problema para los otros desarrolladores que trabajan en el proyecto. –

+1

@TimDelaney que no tendrá ningún efecto catastrófico: ejecutar el enganche simplemente fallará pero la confirmación aún ocurre –

Respuesta

2

ganchos Python no puede utilizar una ruta relativa. Los archivos de comandos pueden tener esto:

[hooks] 
update = ./genid 
+0

esto funciona bien! – pyfunc

+1

podría aclarar: no pude hacer que esto funcionara. Quiero el directorio sobre el directorio .hg. ¿No ./ algo solo se refiere al directorio actual? –

+0

* Los enganches de Python no pueden usar una ruta relativa * - ¿podría proporcionarnos una referencia? –

2

En ciertos casos, las variables de entorno se expanden en una configuración mercurial. Para que pueda verificar si puede usar una variable de entorno.

[hooks] 
update = $MercurialHooks/genid 

Ver Faq (12) en https://www.mercurial-scm.org/wiki/TipsAndTricks

+0

No se ha configurado ninguna variable de entorno que apunte al repositorio que se está operando actualmente. –

+0

@Roger Binns: Lo que quise decir es que podría configurarlo y usarlo. – pyfunc

+0

Sí, entendí que se refería a eso. Pero no funcionará para mi escenario, como si hay salidas en múltiples ubicaciones diferentes o si mueve el repositorio a un directorio diferente. Si tiene que mantener una variable de entorno, entonces bien podría ser $ PATH. Si Mercurial establece uno como $ HG_REPO_DIR, sería maravilloso. –

0

Tuve el mismo problema y no pude resolverlo. ¡La solución fue fácil! ¡Hice la versión del archivo en el repositorio y simplemente lo copié en mi carpeta .hg! No es ideal, pero no es probable que cambie y otros usuarios de repos aún pueden obtener una copia del archivo

Cuestiones relacionadas