Mercurial не отправляет электронные письма, используя changenotify - PullRequest
2 голосов
/ 10 сентября 2011

Я настроил http центральное хранилище Mercurial и пытаюсь отправлять электронные письма при каждом нажатии.Я следую инструкциям со страницы Mercurial и http://morecode.wordpress.com/2007/08/03/setting-up-mercurial-to-e-mail-on-a-commit/.

Push работает нормально, но я не вижу никаких уведомлений вообще.Пожалуйста, помогите мне.

Мой .hg / hgrc в папке моего хранилища моего клиента выглядит следующим образом

[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

Мой /home/myhome/something/subscription.conf выглядит как

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

Я сохраняю, и мой результат выглядит следующим образом, если вы заметите, что я вообще не вижу уведомляющего сообщения

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

[Обновление:]

Я обнаружил, чтов моей системе не было папки hgext.Поэтому я вручную загрузил исходный код, соответствующий моей версии hg, и обновил свой hgrc, как показано ниже, и все же он не работает.Любая помощь, пожалуйста.

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

[Обновление 2:]

Спасибо Ry4an - я попробовал, все еще не повезло.

В моем веб-сервере

В / var / www и / var / www / hg я создал файлы .hgrc, просто не уверен, какой из них является моим webroot, поэтому я сделал в обоих местах содержимое

[trusted]
users=user_name

это имя пользователя - имя пользователяв моем клиенте, откуда я пытаюсь нажать на репо.

на моем клиенте

в .hg / hgrc моего репо, я добавил доверенный раздел

[trusted]
users=user_name

Вышеуказанная процедура не помогла

Второй подход

на моем клиенте,

под моим репо .hg, я сделал

chown www-data:www-data hgrc

и когда я попытался нажать, я получил какое-то сообщение во время нажатия, говоря:

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

Эта команда игнорирования не появляется при первом подходе, только после того, как я изменил владельца hgrc, это выскакивает.

Ответы [ 2 ]

0 голосов
/ 29 октября 2013

Это сработало для меня при общении с сервером 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>

Поместите вышесказанное в файл hgrc в вашем хранилище.

например. C: \ репозиториев \ test.hg \ hgrc

0 голосов
/ 11 сентября 2011

Вероятно, это проблема доверия, но давайте сначала разберемся с несколькими другими вещами:

A) Переключите загрузку расширения на:

[extensions]
notify=

Часть hgext больше не нужна, ноне больноПредоставление полного пути к расширению является более хрупким в случае будущих обновлений.Необработанный синтаксис notify= достаточен для расширений, которые поставляются с Mercurial, и уведомление всегда происходит.

B) Переключите test = false на test = true, это поможет вам отладить это - оно отправит электронное письмо на стандартный вывод, что удобно.

Хорошо, эти два уже сделаны, давайте посмотрим на доверие.Система доверия Mercurial основана на идее, что не каждый может заставить вас запустить код.Представьте, что в файле .hg/hgrc вашего репозитория есть раздел, например:

[hooks]
pre-push = rm -rf ~

Когда я нажму на него, он удалит мой домашний каталог.Это бы меня обескуражило.Чтобы избежать этого, Mercurial будет загружать / запускать только те файлы hgrc, которым он доверяет, и вы говорите ему, что доверять разделам [trusted] в вашей hgrc.Когда вы нажимаете на ssh, вы эффективно входите в систему на удаленном компьютере, и это ваш собственный ~/.hgrc, который, вероятно, указывает, какие другие hgrc-файлы вы хотите выполнить.

HTTP является особенным.Даже если вы проходите аутентификацию, вы, вероятно, не используете Mercurial в удаленной системе, как вы.Вероятно, это какой-то не пользователь, такой как www-data , www , apache или noone , в зависимости от того, как работает ваш веб-сервер.настроен, так что ... вам нужно сделать файл репо .hg/hgrc' owned (or group-owned) by an user (or group) that the webserver user trusts. To achieve that you can either chwown the .hg / hgrc file over to the web server user, or find the web server's home directory (often / var / www ) and create a .hgrc file in there with a [доверенный] block saying that the web server user trusts whomever it is that owns the repo's .hg / hgrc`.

Если я прав насчет того, что происходит, то знак рассказа будет в журнале ошибок вашего веб-сервера, где вы увидите много сообщений типа "Не доверяю /path/to/repo/.hg/hgrc принадлежит someuser ".

TL; DR: Убедитесь, что пользователь вашего веб-сервера доверяет (в смысле hgrc) владельцу .hg/hgrc, который задает ловушку.

...