如何从svn提交创建trac票证?

时间:2012-05-18 08:09:37

标签: trac

我正在寻找一种方法来创建(不更新)trac票据,以响应提交消息,例如“黑客代码不要杀死你的狗(TODO:正确修复此问题以避免追逐小猫)”。

我希望trac系统对“TODO”关键字作出反应,并创建一个包含提交消息内容的票证,所有者设置为提交者,并且已经引用了开始提交。

在搜索SO时我发现Open and close trac tickets with a single commit基本上说我如何推出自己的解决方案。如果没有预制的可用,我会这样做。那么 - 有吗?

2 个答案:

答案 0 :(得分:6)

我建议查看python的官方Trac包:http://pypi.python.org/pypi/Trac/0.11.4和docs http://www.edgewall.org/docs/tags-trac-0.11.7/epydoc/trac-module.html

这是我们用来从python脚本在Trac中创建票证的方法,我认为它使用起来相当简单。您可以将此python脚本作为VCS的post commit钩子运行。

您可以使用项目设置启动trac环境,然后启动新的票证并保存。对你来说可能还有一点,但这应该给你一个好主意:

from trac.env import Environment
from trac.ticket import Ticket

env = Environment(projectSettings, create=0)
tkt = Ticket(env)
tkt['summary'] = 'first line of commit message'
tkt['description'] = 'full commit message'
tkt.save_changes(commitAuthor, '')

答案 1 :(得分:4)

毋庸置疑,目前的Trac稳定性为0.12.3,但当然开发需要与您当前的版本一致。 (你没有告诉我们你的问题。)

关于你的问题,关于如何在Trac核心的 CommitTicketUpdater 之上实现不同的功能有a hint。它具有更新和关闭作为内置操作,因此您需要进行一些更改(基于current Trac trunk):

  • 命令创建一个附加选项commands_create,它创建一个参考变更集的新故障单,作为以空格分隔的列表
  • self.comment分配后立即在changeset_addedchangeset_modified中添加全班变量comment
  • 添加模块cmd_create,如(未经测试的

    def cmd_create(self, ticket, changeset, perm):
        if not self.check_perms or 'TICKET_CREATE' in perm:
            # Commit messages in general is used for a ticket comment.
            # New tickets require summary and we'll want description too,
            # because comment is ignored on ticket creation.
            # So we need to do message processing here beforehand.
            ticket['comment'] = None
            ticket['description'] = self.comment
            ticket['owner'] = changeset.author
            ticket['status'] = 'new'
            ticket['summary'] = ' '.join(['TODO from', str(changeset.rev)])
            ticket.insert()
    
  • 改变ticket_command所以regexp不仅匹配默认的功能票对,还匹配一元'TODO:'(对不起,现在不能让它正常工作)

  • 将私有模块_parse_message扩展为包含if func:

    之前的另一个案例
       if cmd.startswith('TODO'):
           tickets.update({None : ['create']})
           continue
    
  • 更改_update_tickets以使评论保存为有条件的,因为您不需要/想要对新票证进行额外评论

       if ticket['comment']:
           ticket.save_changes(changeset.author, comment, date, db)
    

好的,如果您想尝试这种方法,请根据需要回复。