2012-03-10 56 views
0

Trac 0.11.7環境存在,它使用GitPlugin與Git存儲庫集成。該存儲庫具有post-receive鉤子,這是GitPlugin團隊提供的鉤子的copypost-receive hook無法在推送時針對相同票證進行多次提交時更新Trac票證

當開發人員將其更改推送到服務器時,會觸發post-receive掛鉤。如果包中包含一個提交,那麼一切正常 - 個別提交消息與相應的票據關聯。

但是,如果有幾個提交對同一票則只有最新提交獲取與票關聯,用下面的錯誤提交的其餘部分:

意外的錯誤,而處理券ID 1:列票,時間, 字段不是唯一

(寫在python)的鉤已被分析,它會出現在函數handle_commit的參數中的呼叫ticket.save_changes(eml, msg, now, db, cnum + 1)now的時間部分的不同僅僅按順序處理的提交以毫秒爲單位。

用於Trac的數據庫是SQLite,它很可能不會處理毫秒作爲日期/時間類型的一部分。

什麼是解決上述情況的好方法?

回答

0

爲了正確克服由自動提交造成的限制,即BatchModifyPlugin也觸發了這種情況,內部Trac時間戳記格式已經在0.12從POSIX秒更改爲POSIX微秒(自1970-01-01 0:00以來) 。

所以最好的解決方案是升級到Trac 0.12.3。另一種方式,正如01es所建議的那樣,而不是使用插件。對不起,這只是對黑客的攻擊而已,不應該被指責爲這個問題。即使自動提交之間的最小時間間隔足以讓您的問題在您開始部署當前穩定的Trac版本時立即消失。

0

兩個最明顯的解決方案是遷移到Trac支持的備選RDBMS(例如MySQL),或者如果對同一票證有多個提交,則人爲地向時間戳添加一秒。

後一種方法更簡單但不太嚴謹,並且在多用戶環境下開發人員同時推送可能導致原始問題,可能無法很好地工作。