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 = 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 ответа
Вероятно, это проблема доверия, но давайте сначала коснемся нескольких вещей:
A) Переключите нагрузку на расширение на:
[extensions]
notify=
Часть hgext больше не нужна, но не мешает. Предоставление полного пути к расширению является более хрупким в случае будущих обновлений. Сырье notify=
Синтаксис достаточен для расширений, которые поставляются с Mercurial, а уведомления всегда есть.
Б) Переключите 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 either
chwownthe
.hg / hgrcfile over to the web server user, or find the web server's home directory (often
/ Вар / 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, принадлежащему someuser".
TL; DR: убедитесь, что пользователь вашего веб-сервера доверяет (в смысле hgrc) владельцу .hg/hgrc
это определяет крюк.
Это сработало для меня при общении с сервером 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:\repositories\test.hg\hgrc