post-receive hook无法在推送同一票证的多次提交时更新Trac票证

时间:2012-03-10 22:41:48

标签: trac githooks

有一个Trac 0.11.7环境,它使用GitPlugin与Git存储库集成。这个存储库有一个post-receive钩子,它是GitPlugin团队提供的一个copy

当开发人员将更改推送到服务器时,会触发post-receive挂钩。如果包每个tiket包含一个提交,那么一切都运行良好 - 单独的提交消息与相应的票据相关联。

但是,如果同一票证有多个提交,则只有最新提交与票证相关联,其余提交时出现以下错误:

  

处理故障单ID 1时出现意外错误:列故障单,时间,   字段不是唯一的

已经分析了钩子(用python编写),看起来函数now中调用ticket.save_changes(eml, msg, now, db, cnum + 1)的参数handle_commit的时间部分仅相差毫秒顺序处理提交。

用于Trac的数据库是SQLite,它很可能不会处理毫秒作为日期/时间类型的一部分。

解决上述问题的好方法是什么?

2 个答案:

答案 0 :(得分:0)

两个最明显的解决方案是迁移到Trac支持的备用RDBMS(例如MySQL),或者如果同一票证有多个提交,则人为地在时间戳上添加额外的秒。

后一种方法更简单,但不太严格,在开发人员并发推送可能导致原始问题的多用户环境中可能无法正常工作。

答案 1 :(得分:0)

为了完全克服由自动提交造成的限制,即BatchModifyPlugin触发了这一限制,内部Trac时间戳格式在0.12从POSIX秒变为POSIX微秒(自1970-01-01 0以来) :00)

所以最好的解决方案是升级到Trac 0.12.3。另一种方式,正如01es所建议的那样是乱用插件。对不起,但这只是对黑客的黑客攻击,不应该因此而受到指责。即使是自动提交之间的最小间隔也足以让您的问题在您开始部署当前稳定的Trac版本时立即消失。