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.

È stato utile?

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 eitherchwownthe.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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top