2

我建立了一个 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

此用户名是我尝试推送到存储库的客户端中的用户名。

在我的客户上

在我的 repo 的 .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的所有权后,才会弹出这个。

4

2 回答 2

0

这可能是一个信任问题,但让我们先解决一些其他问题:

A) 将扩展负载切换为:

[extensions]
notify=

hgext 部分不再需要,但不会受到伤害。在未来更新的情况下,提供扩展的完整路径更加脆弱。notify=对于 Mercurial 附带的扩展,原始语法就足够了,并且 notify 总是如此。

B)切换test = falsetest = true它将帮助您调试它——它将电子邮件发送到标准输出,这很方便。

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

[hooks]
pre-push = rm -rf ~

当我推到它时,它会删除我的主目录。那会让我很沮丧。为了避免这种情况发生,Mercurial 只会加载/运行它信任的 hgrc 文件,并且你告诉它信任你的hgrc[trusted]中的部分。当您推送 ssh 时,您实际上是在登录到远程机器,并且您自己可能会说明您愿意执行哪些其他 hgrc 文件。~/.hgrc

HTTP 是特殊的。即使您可能正在进行身份验证,您也可能没有像您自己一样在远程系统上运行 Mercurial。可能是一些非用户用户,例如www-datawwwapachenoone ,具体取决于您的 Web 服务器的配置方式,因此...您需要制作该 repo 的.hg/hgrc' owned (or group-owned) by an user (or group) that the webserver user trusts. To achieve that you can eitherchwown 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”。

TL;DR:确保您的 Web 服务器用户信任(在 hgrc 意义上).hg/hgrc指定钩子的所有者。

于 2011-09-11T02:26:26.520 回答
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 文件中。

例如 C:\repositories\test.hg\hgrc

于 2013-10-28T22:25:23.673 回答