Pregunta

Configuré un repositorio central http de Mercurial e intento enviar correos electrónicos en cada envío.Sigo instrucciones de la página mercurial y de http://morecode.wordpress.com/2007/08/03/setting-up-mercurial-to-e-mail-on-a-commit/.

Push funciona bien, pero no veo ningún mensaje de notificación.Por favor, ayúdame.

Mi .hg/hgrc en la carpeta del repositorio de mi cliente se ve así

[extensions]
hgext.notify= 

[hooks]
changegroup.notify = python:hgext.notify.hook

[email]
from = what@gmail.com

[smtp]
host = smtp.gmail.com
username = what@gmail.com
password = ohyea
port = 587
tls = true

[web]
baseurl = http://1.1.1.1/repo_name

[notify]
sources = serve push pull bundle

# set this to False when you're ready for mail to start sending
test = False

config = /home/myhome/something/subscription.conf

template = \ndetails:   {baseurl}{webroot}/rev/{node|short}\nchangeset:{rev}:node|short}\nuser:      {author}\ndate:      {date|date}\ndescription:\n{desc}\n

maxdiff = 300

Mi /home/myhome/something/subscription.conf parece

[reposubs]
# key is glob pattern, value is comma-separated list of subscriber emails
* = sometestemail@gmail.com

Guardo y mi resultado se ve a continuación, si notas que no veo ningún mensaje de notificación

pushing to http://1.1.1.1/repo_name
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 2 changesets with 7376 changes to 7376 files

[Actualizar:]

Descubrí que no había ninguna carpeta hgext en mi sistema.Así que descargué manualmente la fuente que coincide con mi versión de hg y actualicé mi hgrc como se muestra a continuación, y todavía no funciona.Cualquier ayuda por favor.

[extensions]
notify= /path/to/notify.py

[Actualización 2:]

Gracias Ry4an. Lo probé y todavía no tuve suerte.

en mi servidor web

Debajo/var/www y/var/www/hg creé archivos .hgrc, simplemente no estoy seguro de cuál es mi raíz web, así que lo hice en ambos lugares con contenido

[trusted]
users=user_name

este nombre de usuario es el nombre de usuario en mi cliente desde donde intento acceder al repositorio.

en mi cliente

en el .hg/hgrc de mi repositorio, agregué la sección de confianza

[trusted]
users=user_name

El procedimiento anterior no ayudó.

Segundo enfoque

en mi cliente,

bajo el .hg de mi repositorio, lo hice

chown www-data:www-data hgrc

y cuando intenté presionar recibí un mensaje mientras presionaba que decía

sending capabilities command
capabilities: changegroupsubset stream lookup pushkey unbundle=HG10GZ,HG10BZ,HG10UN branchmap
sending heads command
searching for changes
common changesets up to 6ef19c49143a
sending branchmap command
ignoring untrusted configuration option hooks.changegroup.notify = python:hgext.notify.hook

Este comando de ignorar no aparece durante el primer acceso, solo aparece después de cambiar la propiedad de hgrc.

¿Fue útil?

Solución

Probablemente sea un problema de confianza, pero primero veamos algunas otras cosas:

A) Cambie la carga de extensión a:

[extensions]
notify=

La parte hgext ya no es necesaria, pero no hace daño.Dar la ruta completa a la extensión es más frágil en el caso de futuras actualizaciones.La herida notify= La sintaxis es suficiente para las extensiones que vienen con Mercurial y notify siempre lo hace.

B) Cambiar el test = false a test = true le ayudará a depurar esto: envía el correo electrónico a Stdout, lo cual es útil.

Bien, esos dos terminaron, veamos la confianza.El sistema de confianza de Mercurial se basa en la idea de que no cualquiera debería poder obligarte a ejecutar código.Imagínese si su repositorio .hg/hgrc El archivo tenía una sección como:

[hooks]
pre-push = rm -rf ~

Cuando lo presioné, eliminaría mi directorio de inicio.Eso me desanimaría.Para evitar que eso suceda, Mercurial solo cargará/ejecutará archivos hgrc en los que confíe, y usted le dirá en qué confiar [trusted] secciones en su hgrc.Cuando estás presionando sobre ssh, efectivamente estás iniciando sesión en la máquina remota y es tuya. ~/.hgrc eso probablemente indique qué otros archivos hgrc está dispuesto a ejecutar.

Sin embargo, HTTP es especial.Aunque se esté autenticando, probablemente no esté ejecutando Mercurial en el sistema remoto como usted mismo.Probablemente sea algún usuario no usuario como www-datos, www, apache, o nadie dependiendo de cómo esté configurado su servidor web, entonces...necesitas hacer ese repositorio .hg/hgrc' owned (or group-owned) by an user (or group) that the webserver user trusts. To achieve that you can eithermasticarthe.hg/hgrcfile over to the web server user, or find the web server's home directory (often/var/www) and create a.hgrcfile in there with a[confiable]block saying that the web server user trusts whomever it is that owns the repo'sArchivo .hg/hgrc`.

Si tengo razón acerca de lo que está sucediendo, el letrero revelador estaría en el registro de errores de su servidor web, donde vería muchos mensajes como "No confío en /path/to/repo/.hg/hgrc propiedad de algún usuario".

TL;DR: Asegúrese de que el usuario de su servidor web confíe (en el sentido hgrc) en el propietario del .hg/hgrc eso es especificar el gancho.

Otros consejos

Esto funcionó para mí cuando me comunicaba con un servidor Exchange:

[hostfingerprints]
<my exchange FQDN> = 2a:f3:89:69:13:b2:1e:3a:c2:fe:f9:7f:de:b3:39:e7:82:8e:99:93

[extensions]
notify =

[hooks]
changegroup.notify = python:hgext.notify.hook

[email]
from = Mercurial Notification <noreply@mydomain>

[smtp]
host = <exchange FQDN>
tls = true

[notify]
sources = serve push pull bundle
test = False
maxdiff = 300

[reposubs]
* = Cameron Rich <cameron.rich@mydomain.com>

Coloque lo anterior en el archivo hgrc de su repositorio.

p. ej.C: \ repositories \ test.hg \ hgrc

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top