让CommitTicketUpdater与svn一起在trac中工作



我使用trac和svn作为问题跟踪系统。最近,我发现提交消息也可以使用分布式CommitTicketUpdater(出现在trachot中)修改票证(添加注释,关闭它们),从trac1.12(我使用的版本)开始。

这安装在ubuntu 12.04上。我提交后的代码就这么简单:

REV="$2"
/usr/bin/trac-admin /var/trac/proj changeset added robo $REV

其中"robo"是我的存储库的名称,如trac中所定义。这实际上非常有效;变更集与svn提交期间编写的提交消息一起出现在trac中。问题不在这里。

插件(http://trac.edgewall.org/wiki/CommitTicketUpdater)应该在提交消息中查找诸如"see#22"或"fix#23"之类的字符串,并更新/关闭相关票证。这在语法上相当灵活。我已经从管理web选项卡启用了插件(并应用了更改),甚至尝试升级(不过,不需要升级)。

我已经在trac.ini文件中的[ticket]下配置了插件,因此:

commit_ticket_update_envelope =
commit_ticket_update_commands.close = close closed closes fix fixed fixes
commit_ticket_update_commands.refs = <ALL>
commit_ticket_update_check_perms = false
commit_ticket_update_notify = false

但我尝试了许多其他变体,包括评论其中的一些行。我也试着把[]放在信封里,但没有改变。

最重要的是,虽然添加了变更集,但票证中没有任何更改。

我想这可能是权限问题。因此,我将TRAC_ADMIN添加到了匿名,但这并没有改变任何内容。我已经意识到我不确定trac是如何处理linux用户的;它们不会以任何方式向web服务器进行身份验证。。。但除此之外,还能做什么呢?

所以我用root进行了承诺,并且成功了。所以这都是关于linux权限的。不过,我的用户属于"svn"组,该组对我的项目文件夹拥有写入权限。然而,这还不够,使用root进行提交确实有效。

我的下一个方向是将我自己(以及任何其他提交者)添加到sudoers中,而不需要操作该钩子的密码。

这样做了:我添加了"hansz-debi=NOPASSWD:/usr/bin/trac-admin"(其中debi是服务器名,hansz是我的用户名),并将提交后的行修改为:

sudo -u root /usr/bin/trac-admin /var/trac/proj changeset added robo $REV

这也于事无补。作为根工作,而作为我自己——不是。

这就是我停止尝试的地方,请你帮忙。

CommitTicketUpdater将变更集的作者作为权限检查对象(但您还是禁用了权限检查)。它不使用UNIX用户进行任何操作。

TRAC_ADMIN赋予anonymous也不会有任何作用,因为经过身份验证的用户继承的是authenticated的权限,而不是anonymous的权限。

当您以root身份运行trac-admin $ENV changeset added时,更新票证确实有效,这一事实确实指向(文件系统)权限问题。为什么它不适用于sudo有点神秘。请注意,运行trac-admin的用户需要对所有Trac环境具有读写权限。

您使用的存储库类型是svn还是svn-direct?在后一种情况下,即使您没有写入环境的权限,变更集也会出现在Trac中。

我建议将您的日志记录级别提升到DEBUG,看看日志是否能告诉您什么。我还建议加入trac用户的邮件列表并在那里询问。您将接触到更多熟悉Trac设置的人。此外,SO是一个很好的提问平台,但对于调试安装来说并不理想。

最新更新