我正在寻找一种创建(不更新)trac 票证的方法,以响应诸如“破解代码以不杀死你的狗(TODO:正确修复此问题以避免追逐小猫)”之类的提交消息。
我希望 trac 系统对“TODO”关键字作出反应,并使用提交消息的内容、设置为提交者的所有者和已引用的打开提交创建一张票。
在搜索 SO 时,我发现Open and close trac 票证只需一次提交,这基本上说明了我如何推出自己的解决方案。如果没有可用的预制件,我会这样做。所以 - 有吗?
我正在寻找一种创建(不更新)trac 票证的方法,以响应诸如“破解代码以不杀死你的狗(TODO:正确修复此问题以避免追逐小猫)”之类的提交消息。
我希望 trac 系统对“TODO”关键字作出反应,并使用提交消息的内容、设置为提交者的所有者和已引用的打开提交创建一张票。
在搜索 SO 时,我发现Open and close trac 票证只需一次提交,这基本上说明了我如何推出自己的解决方案。如果没有可用的预制件,我会这样做。所以 - 有吗?
我建议查看 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, '')
不用说,当前的 Trac 稳定版是 0.12.3,但当然开发需要与您当前的版本一致。(你没有在你的问题中告诉我们。)
关于你的问题,有一个关于如何在Trac 核心的CommitTicketUpdater之上实现不同功能的提示。它具有 update 和 close 作为内置操作,因此您需要像这样进行一些更改(基于当前 Tractrunk
):
commands_create
为命令创建一个附加选项,以空格分隔的列表形式创建参考变更集的新票证self.comment
在赋值之后changeset_added
和changeset_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)
好的,如果您想尝试这种方法,请根据需要询问。