2

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

这是安装在 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

这也没有帮助。以 root 身份提交工作,作为我自己 - 不是。

这是我停止尝试的地方,并寻求您的帮助。

4

1 回答 1

2

CommitTicketUpdater将变更集的作者用于权限检查(并且您无论如何都禁用了权限检查)。它不使用 UNIX 用户做任何事情。

给予TRAC_ADMINanonymous不会做任何事情,因为经过身份验证的用户继承了 的权限authenticated,而不是anonymous.

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

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

我建议将您的日志记录级别提高到DEBUG并查看日志是否告诉您任何信息。我还建议加入 trac-users 邮件列表并在那里询问。您将接触到更多熟悉 Trac 设置的人。此外,SO 是一个很好的提问平台,但它并不适合调试安装。

于 2012-12-11T21:04:00.233 回答