Mercurial n'envoie pas d'e-mails à l'aide de changeNotify
-
28-10-2019 - |
Question
J'ai configuré un référentiel Mercurial HTTP Central et j'essaie d'envoyer des e-mails à chaque poussée. Je suis les instructions de la page mercuriale et de http://morecode.wordpress.com/2007/08/03/setting-up-mercurial-to-e-mail-on-a-commit/.
Push fonctionne correctement, mais je ne vois aucun message d'information. Aidez-moi, s'il vous plaît.
Mon .hg / hgrc dans mon dossier de référentiel de mon client ressemble à ceci
[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
Mon /home/myhome/something/subscription.conf ressemble à
[reposubs]
# key is glob pattern, value is comma-separated list of subscriber emails
* = sometestemail@gmail.com
J'enregistre et mon résultat ressemble ci-dessous, si vous remarquez que je ne vois aucun message d'avis du tout
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
Mise à jour:
J'ai trouvé qu'il n'y avait pas de dossier HGEXT dans mon système. J'ai donc téléchargé manuellement la source correspondant à ma version HG et mis à jour mon HGRC comme ci-dessous, et cela ne fonctionne toujours pas. Toute aide s'il vous plaît.
[extensions]
notify= /path/to/notify.py
Mise à jour 2:
Merci Ry4an - Je l'ai essayé, toujours pas de chance.
Dans mon serveur Web
Sous / var / www et / var / www / hg J'ai créé des fichiers .hgrc, je ne sais pas lequel est mon webroot, donc j'ai fait aux deux endroits avec le contenu
[trusted]
users=user_name
Ce nom d'utilisateur est le nom d'utilisateur de mon client d'où j'essaie de pousser au dépôt.
sur mon client
Dans le .hg / hgrc de mon dépôt, j'ai ajouté la section de confiance
[trusted]
users=user_name
La procédure ci-dessus n'a pas aidé
Deuxième approche
sur mon client,
Sous mon repo .hg, j'ai fait
chown www-data:www-data hgrc
Et quand j'ai essayé de pousser, j'ai reçu un message en poussant à dire
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
Cette commande d'ignorance n'apparaît pas lors de la première approche, seulement après avoir changé la propriété de HGRC, cela apparaît.
La solution
C'est probablement un problème de confiance, mais frappons d'abord quelques autres choses:
A) Communiquez la charge d'extension à:
[extensions]
notify=
La partie HGEXT n'est plus nécessaire, mais ne fait pas de mal. Donner le chemin complet vers l'extension est plus fragile dans le cas des futures mises à jour. Le brut notify=
La syntaxe est suffisante pour les extensions qui viennent avec le mercuriel et le fait toujours.
B) changer le test = false
à test = true
Cela vous aidera à déboguer - il envoie l'e-mail à STDOUT, ce qui est pratique.
D'accord, ces deux-là, regardons la confiance. Le système de confiance de Mercurial est construit autour de l'idée que non plus quiconque devrait être en mesure de vous faire exécuter du code. Imaginez si votre repo .hg/hgrc
Le fichier avait une section dedans comme:
[hooks]
pre-push = rm -rf ~
Quand j'y suis poussé, il supprime mon répertoire d'origine. Cela me dresserait. Pour éviter que Mercurial ne se produise unique [trusted]
sections ton HGRC. Lorsque vous poussez SSH, vous vous connectez effectivement à la machine distante et c'est le vôtre ~/.hgrc
Cela indique probablement quels autres fichiers HGRC que vous êtes prêt à exécuter.
HTTP est cependant spécial. Même si vous vous authentifiez, vous ne faites probablement pas de mercurial sur le système distant en tant que vous-même. C'est probablement un utilisateur non utilisateur comme www-data, www, apache, ou personne en fonction de la configuration de votre serveur Web, donc ... vous devez faire ce repo .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
de confianceblock saying that the web server user trusts whomever it is that owns the repo's
Fichier .hg / hgrc`.
Si j'ai raison sur ce qui se passe, le signe Tell Tale serait dans le journal des erreurs de votre serveur Web où vous verriez beaucoup de messages comme "Not Trusting /path/to/repo/.hg/hgrc appartenant à SomeUser".
Tl; dr: Assurez-vous que votre utilisateur de votre serveur Web fait confiance (au sens HGRC) le propriétaire du .hg/hgrc
Cela spécifie le crochet.
Autres conseils
Cela a fonctionné pour moi lors de la communication avec un serveur 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>
Mettez ce qui précède dans le fichier HGRC dans votre référentiel.
par exemple C: Repositories test.hg hgrc