TracBrowserがSVNの巨大なChangesetを処理しきれない場合へのフェイルセーフ

巨大なテキスト扱いのファイルがSVNレポジトリにコミットされている場合(一般的なソフト開発では普通遭遇しないようなケース?でも業界によっては軽く単発で100Mbyte以上のテキストファイルを運用せざるを得ない事もあったりなかったり)、Changesetを要求されればTracBrowserはある意味真面目にブラウザ上に要求通りに表示しようとして固まってしまう(あるいはメモリエラーでoops)。
max_diff_bytes,max_diff_filesの設定値で表示抑制できるとなっているが、おそらくその前処理部分で死亡してしまう(unicode変換辺りが重いヨカン)。

その一方で属性binary扱いのファイルであれば最初から差分抽出処理が走らずTracBrowserも固まらない。しかし全てのcommitterに巨大なテキストは皆の迷惑だからbinary属性つけろというのも運用としてなかなか難しい。とはいえ地雷の如く踏むとブラウザ固まるchangeset revisionがある状態も放置出来ないので対策としてTrac本体の改造を検討してみた。方針は、「ある一定サイズを超えるファイルはchangeset表示処理上問答無用でbinaryと同様の扱いにする」

%TRAC_LIGHT_HOME%\python-lib\trac\trac\versioncontrol\web_ui\changeset.py

例によってファイル名から当たりをつけた上記ファイルを潜入調査。幸いというかファイルがbinaryかどうかチェックして差分抽出処理をスキップする記述はすぐ特定できファイルサイズを取得する処理も内包されていたのでif分岐を数カ所追加で意外とあっさり改造自体は完了。その後いつものように

cd %TRAC_LIGHT_HOME%\python-lib\trac
python setup.py install
実行してTrac再構築→再起動で無事動作確認成功。地雷除去バンザーイ