Mercurial não envia e-mails usando changenotify
-
28-10-2019 - |
Pergunta
Eu configurei um repositório central do Mercurial http e tento enviar e-mails a cada envio. Sigo as instruções da página do mercurial e de http://morecode.wordpress.com/2007/08/03/setting-up-mercurial-to-e-mail-on-a-commit/ .
O push funciona bem, mas não vejo nenhuma mensagem de notificação. Por favor me ajude.
Meu .hg / hgrc na pasta do meu repositório do meu cliente se parece com isto
[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
Minha /home/myhome/something/subscription.conf se parece com
[reposubs]
# key is glob pattern, value is comma-separated list of subscriber emails
* = sometestemail@gmail.com
Eu salvo e meu resultado é o seguinte, se você perceber que não vejo nenhuma mensagem de notificação
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
[Atualização:]
Descobri que não havia uma pasta hgext em meu sistema. Então, eu baixei manualmente a fonte correspondente à minha versão hg e atualizei meu hgrc como abaixo, e ainda não funciona. Qualquer ajuda, por favor.
[extensions]
notify= /path/to/notify.py
[Atualização 2:]
Obrigado Ry4an - Tentei, mas sem sorte.
No meu servidor da web
Em / var / www e / var / www / hg Eu criei arquivos .hgrc, mas não tenho certeza de qual é meu webroot, então fiz em ambos os lugares com conteúdo
[trusted]
users=user_name
este nome de usuário é o nome de usuário do meu cliente de onde estou tentando enviar para o repo.
no meu cliente
no .hg / hgrc do meu repo, adicionei a seção confiável
[trusted]
users=user_name
O procedimento acima não ajudou
Segunda abordagem
no meu cliente,
no .hg do meu repo, eu fiz
chown www-data:www-data hgrc
e quando tentei empurrar, recebi uma mensagem enquanto pressionava dizendo
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 não aparece durante a primeira abordagem, apenas depois que eu mudo a propriedade do hgrc, isso aparece.
Solução
É provável que seja um problema de confiança, mas vamos abordar algumas outras coisas primeiro:
A) Mude a carga da extensão para:
[extensions]
notify=
A parte hgext não é mais necessária, mas não faz mal. Fornecer o caminho completo para a extensão é mais frágil no caso de atualizações futuras. A sintaxe bruta notify=
é suficiente para extensões que vêm com o Mercurial e o notificar sempre vem.
B) Mude o test = false
para test = true
. Isso ajudará você a depurar isso - ele envia o e-mail para Stdout, o que é útil.
Ok, esses dois terminaram, vamos dar uma olhada na confiança. O sistema de confiança do Mercurial é construído em torno da ideia de que nem qualquer pessoa deve ser capaz de fazer com que você execute o código. Imagine se o arquivo .hg/hgrc
do seu repo tivesse uma seção como:
[hooks]
pre-push = rm -rf ~
Quando eu empurrava para ele, ele excluía meu diretório inicial. Isso iria me chatear. Para evitar que isso aconteça, o Mercurial só carregará / executará arquivos hgrc em que ele confia, e você diz a ele no que confiar com as seções [trusted]
em seu hgrc. Quando você está transferindo o ssh, está efetivamente se conectando à máquina remota e é o seu próprio ~/.hgrc
que provavelmente indica quais outros arquivos hgrc você deseja executar.
Mas o HTTP é especial. Mesmo que você esteja se autenticando, provavelmente não está executando o Mercurial no sistema remoto como você mesmo. Provavelmente é algum usuário não usuário como www-data , www , apache ou ninguém , dependendo de como seu servidor web está configurado, então ... você precisa fazer o .hg/hgrc' owned (or group-owned) by an user (or group) that the webserver user trusts. To achieve that you can either
chwownthe
.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
[arquivo confiável] block saying that the web server user trusts whomever it is that owns the repo's
.hg / hgrc`.
Se eu estiver certo sobre o que está acontecendo, o sinalizador estaria no registro de erros do seu servidor da web, onde você veria muitas mensagens como "Não confiar em /path/to/repo/.hg/hgrc pertencente a algum usuário ".
TL; DR: certifique-se de que o usuário do seu servidor da web confie (no sentido hgrc) no proprietário do .hg/hgrc
que está especificando o gancho.
Outras dicas
Isso funcionou para mim ao me comunicar com um Exchange Server:
[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 o acima no arquivo hgrc em seu repositório.
por exemploC: \ repositories \ test.hg \ hgrc