1

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

我希望 trac 系统对“TODO”关键字作出反应,并使用提交消息的内容、设置为提交者的所有者和已引用的打开提交创建一张票。

在搜索 SO 时,我发现Open and close trac 票证只需一次提交,这基本上说明了我如何推出自己的解决方案。如果没有可用的预制件,我会这样做。所以 - 有吗?

4

2 回答 2

6

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

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

您可以使用您的项目设置启动一个 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, '')
于 2012-05-18T08:30:08.183 回答
4

不用说,当前的 Trac 稳定版是 0.12.3,但当然开发需要与您当前的版本一致。(你没有在你的问题中告诉我们。)

关于你的问题,有一个关于如何在Trac 核心的CommitTicketUpdater之上实现不同功能的提示。它具有 update 和 close 作为内置操作,因此您需要像这样进行一些更改(基于当前 Tractrunk):

  • 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所以正则表达式不仅匹配默认的函数票对,而且匹配一元'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)
    

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

于 2012-05-19T14:33:16.930 回答