Mercurial不会使用changenotify发送电子邮件

时间:2011-09-09 22:16:15

标签: mercurial mercurial-hook mercurial-extension

我设置了一个http中央Mercurial存储库,并尝试在每次推送时发送电子邮件。我按照mercurial页面和http://morecode.wordpress.com/2007/08/03/setting-up-mercurial-to-e-mail-on-a-commit/的说明进行操作。

推送工作正常,但我根本看不到任何通知消息。请帮帮我。

我客户端的我的存储库文件夹中的.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 :(得分:0)

这可能是一个信任问题,但让我们首先尝试其他一些事情:

A)将扩展加载切换到:

[extensions]
notify=

不再需要hgext部分,但不会受到伤害。在未来更新的情况下,提供扩展的完整路径更加脆弱。原始notify=语法足以用于Mercurial附带的扩展,并且始终通知。

B)将test = false切换到test = true它会帮助你调试它 - 它会将电子邮件发送到Stdout,这很方便。

好的,那两个完成了,让我们看看信任。 Mercurial的信任系统是围绕这样的想法而建立的,即不仅任何人都应该能够让你运行代码。想象一下,如果您的repo的.hg/hgrc文件中有一个部分,如:

[hooks]
pre-push = rm -rf ~

当我按下它时会删除我的主目录。那会让我失望。为了避免这种情况发生,Mercurial只会加载/运行它信任的hgrc文件,并告诉它与你的 hgrc中的[trusted]部分相信什么。当您推送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 {{1 } {trusted] file in there with a。hg / hgrc` file。

如果我说对的是什么,告诉故事标志会出现在你的网络服务器的错误日志里,你会看到很多消息,比如“不信任某些用户所拥有的/path/to/repo/.hg/hgrc” ”

TL; DR:确保您的网络服务器用户信任(在hgrc意义上)指定挂钩的block saying that the web server user trusts whomever it is that owns the repo's的所有者。

答案 1 :(得分:0)

在与Exchange Server通信时,这对我有用:

[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文件中。

e.g。 C:\库\ test.hg \ hgrc