我正在寻找一种方法来创建(不更新)trac票据,以响应提交消息,例如“黑客代码不要杀死你的狗(TODO:正确修复此问题以避免追逐小猫)”。
我希望trac系统对“TODO”关键字作出反应,并创建一个包含提交消息内容的票证,所有者设置为提交者,并且已经引用了开始提交。
在搜索SO时我发现Open and close trac tickets with a single commit基本上说我如何推出自己的解决方案。如果没有预制的可用,我会这样做。那么 - 有吗?
答案 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_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
所以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)
好的,如果您想尝试这种方法,请根据需要回复。