2012-03-10 14 views
0

GitPluginを使用してGitリポジトリと統合されたTrac 0.11.7環境があります。このリポジトリにはポスト受信フックがあり、GitPluginチームが提供するフックのcopyです。ポスト受信フックは、同じチケットの複数のコミットを含むプッシュ時にTracチケットを更新できません

開発者が変更をサーバーにプッシュすると、受信後フックがトリガーされます。パックに1つのコミットが含まれていれば、すべてが完全に動作します。個々のコミットメッセージはそれぞれのチケットに関連付けられています。

しかし、同じチケットのためのいくつかのコミットがある場合にのみ、最新のコミットコミットの残りの部分について、次のエラーで、チケットに関連付けられます:

予期しないエラーがチケット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へのアップグレードです。もう1つの方法は、01esで示唆されているように、代わりにプラグインを使いこなすことです。申し訳ありませんが、これはちょうど問題を理由に非難されるべきではないハックのハックです。自動コミット間の最小限の間隔でも、現在の安定版Tracバージョンのデプロイを開始するとすぐに問題が消えるようになります。

0

2つの最も明白な解決策は、Tracでサポートされている別のRDBMS(MySQLなど)に移行するか、同じチケットに対して複数のコミットがある場合は人為的に追加の秒をタイムスタンプに追加することです。

後者のアプローチは単純ですが、厳密さは厳しくなく、開発者による同時プッシュが元の問題につながる可能性のあるマルチユーザー環境ではうまく機能しない可能性があります。

関連する問題