2012-05-18 91 views
1

我正在寻找一种方式响应像提交信息创造(未更新)一TRAC票“黑客代码,不杀你的狗(TODO:妥善解决这一问题,避免追小猫代替)”。如何从svn commit创建trac门票?

我希望TRAC系统对“TODO”关键字反应并创建票证与提交信息的内容,业主设置为提交者和开放已提交引用。

在寻找,所以我发现Open and close trac tickets with a single commit基本上说,我怎么能推出自己的解决方案。如果没有可用的预制件,我会这样做。那么 - 有吗?

回答

6

我建议看官方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的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, '') 
+0

可能就是这样。我将在下周尝试一下,现在感谢您指出trac模块文档,我可以从中获得帮助。 – mabi

4

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

关于你的问题,有a hint就如何落实在最前的CommitTicketUpdater从Trac的核心不同的功能。它具有更新和接近内置操作,所以你需要做一些改变,像这样(基于current Trac trunk):

  • 创建一个额外的选项commands_create命令,即创建一个参考新票到变更,作为一个空间分隔的列表
  • 在两者的changeset_added添加一个类宽可变self.commentchangeset_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所以正则表达式不仅将匹配默认功能票(S)对,但一元“TODO:”,以及(对不起,不能让这个工作的权利-away现在)

  • 延伸私营模块_parse_message之前if func:

    包括另一种情况下
  • 变化_update_tickets做出评论保存条件,因为您将不再需要/想在新票附加注释)

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

好了,反问作为如果你喜欢尝试这种方法,那么这是必需的。

+0

这真的很令人印象深刻,但超出了我的需要。 @ cdlk可能会出现,我将无法访问系统,直到下周才尝试。不管怎么说,还是要谢谢你! – mabi

相关问题