Mercurial non invia e-mail utilizzando changenotify
-
28-10-2019 - |
Domanda
Ho impostato un repository Mercurial http centrale e cerco di inviare e-mail a ogni push. Seguo le istruzioni dalla pagina di mercurial e da http://morecode.wordpress.com/2007/08/03/setting-up-mercurial-to-e-mail-on-a-commit/ .
Push funziona bene, ma non vedo alcun messaggio di notifica. Per favore aiutami.
Il mio .hg / hgrc nella cartella del repository del mio client ha questo aspetto
[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
Il mio /home/myhome/something/subscription.conf ha questo aspetto
[reposubs]
# key is glob pattern, value is comma-separated list of subscriber emails
* = sometestemail@gmail.com
Salvo e il mio risultato appare come di seguito, se noti che non vedo alcun messaggio di notifica
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
[Aggiorna:]
Ho scoperto che non c'era alcuna cartella hgext nel mio sistema. Quindi ho scaricato manualmente il sorgente corrispondente alla mia versione di hg e ho aggiornato il mio hgrc come di seguito, e ancora non funziona. Qualsiasi aiuto per favore.
[extensions]
notify= /path/to/notify.py
[Aggiorna 2:]
Grazie Ry4an - L'ho provato, ancora senza fortuna.
Nel mio server web
In / var / www e / var / www / hg Ho creato file .hgrc, ma non sono sicuro di quale sia la mia webroot, quindi l'ho fatto in entrambi i posti con i contenuti
[trusted]
users=user_name
questo nome utente è il nome utente nel mio client da cui provo a eseguire il push al repository.
sul mio cliente
nel .hg / hgrc del mio repository, ho aggiunto la sezione fidata
[trusted]
users=user_name
La procedura precedente non ha aiutato
Secondo approccio
sul mio cliente,
sotto il .hg del mio repository, l'ho fatto
chown www-data:www-data hgrc
e quando ho provato a spingere ho ricevuto un messaggio mentre spingevo dicendo
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
Questo comando di ignoranza non viene visualizzato durante il primo approccio, solo dopo aver cambiato la proprietà di hgrc, viene visualizzato.
Soluzione
È probabile che si tratti di un problema di fiducia, ma prima esaminiamo alcune altre cose:
A) Cambia il carico dell'estensione su:
[extensions]
notify=
La parte hgext non è più necessaria, ma non fa male. Dare il percorso completo all'estensione è più fragile in caso di aggiornamenti futuri. La sintassi grezza notify=
è sufficiente per le estensioni fornite con Mercurial e le notifiche lo fanno sempre.
B) Cambia il test = false
in test = true
ti aiuterà a eseguire il debug di questo - invia l'email a Stdout, il che è utile.
Ok, quei due hanno finito, diamo un'occhiata alla fiducia. Il sistema di fiducia di Mercurial è costruito intorno all'idea che non chiunque dovrebbe essere in grado di farti eseguire codice. Immagina se il file .hg/hgrc
del tuo repository avesse una sezione come:
[hooks]
pre-push = rm -rf ~
Quando ho eseguito il push, cancellava la mia directory home. Questo mi stancherebbe. Per evitare che ciò accada, Mercurial caricherà / eseguirà solo i file hgrc di cui si fida, e tu gli dirai di cosa fidarsi con le sezioni [trusted]
nel tuo hgrc. Quando esegui il push over ssh, accedi in modo efficace alla macchina remota ed è il tuo ~/.hgrc
che probabilmente indica quali altri file hgrc sei disposto a eseguire.
Tuttavia, HTTP è speciale. Anche se ti stai autenticando, probabilmente non stai eseguendo Mercurial sul sistema remoto come te stesso. Probabilmente è un utente non utente come www-data , www , apache o noone a seconda di come il tuo server web è configurato, quindi ... devi creare il file .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
[attendibile] block saying that the web server user trusts whomever it is that owns the repo's
.hg / hgrc` del repository.
Se ho ragione su quello che sta succedendo, il segnale di avvertimento sarebbe nel registro degli errori del tuo server web dove vedresti molti messaggi come "Non fidarsi di /path/to/repo/.hg/hgrc di proprietà di qualche utente ".
TL; DR: assicurati che l'utente del tuo server web si fidi (nel senso di hgrc) del proprietario del .hg/hgrc
che specifica l'hook.
Altri suggerimenti
Questo ha funzionato per me durante la comunicazione con un server 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>
Metti quanto sopra nel file hgrc nel tuo repository.
ad es.C: \ repository \ test.hg \ hgrc