Mercurial не отправляет электронные письма с помощью changenotify

Я установил центральный 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 = [email protected]

[smtp]
host = smtp.gmail.com
username = [email protected]
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
* = [email protected]

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

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, просто не зная, какой из них является моим корневым каталогом, поэтому я сделал в обоих местах с содержимым

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


person devgp    schedule 09.09.2011    source источник


Ответы (2)


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

A) Переключите удлинительную нагрузку на:

[extensions]
notify=

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

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

Ладно, эти двое готовы, давайте посмотрим на доверие. Система доверия 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 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 [доверенный] block saying that the web server user trusts whomever it is that owns the repo's.hg / hgrc`.

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

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

person Ry4an Brase    schedule 11.09.2011
comment
Спасибо - я попробовал - все равно не повезло, пожалуйста, посмотрите раздел обновления 2 в моем сообщении. Еще раз спасибо за помощь - person devgp; 12.09.2011

У меня это сработало при общении с сервером 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 <[email protected]>

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

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

person camster    schedule 28.10.2013