ZCVSMixinの仕掛けについて簡単に説明しておこう。
まず、ZODB配下のオブジェクトをCVS管理するための作業ディレクトリを用意する。ZCVSMixinで管理するオブジェクトは、すべてこの作業ディレクトリを通じてCVSとのやりとりをする。つまり、
ZODB <-> Work Dir <-> CVS Repository
ちゅう3段構造でもって、ZopeオブジェクトをCVS管理しようという仕掛け。
ところが、この
ZODB <-> Work Dir
のやりとりがクセモノで、Zopeのimport/export機能を利用しているんですな。結局.zexp(バイナリ)か.xml(テキスト)形式のふたとおりしかない。
どうしてこれがダメダメかというと、.xmlの「テキスト形式」ってのは(我々8ビット圏の人間にとって)「まがいもの」にしかすぎないのだ。
ご承知でない方のために補足しておくと、Zopeのimport/export機構は、7bit cleanでないすべてのレコードについて、がつがつにBase64エンコードして吐き出してくれる。つまり、プレーンテキストではない=差分なんて無意味、だということ。
こんなバカなことする悪者はどこだ?と調べると、Zopeのppml(Provide conversion between Python pickles and XML)ちゅうモジュールが犯人。位置はShared.DC.xml.ppmlだ。下手に触ったら従来との.xmlと互換性れなくなりそうだし、おっかなくってとても触れないよ。
で、ZCVSMixinプロダクト自体も使えないシロモノだということで「とりあえずは」片づける。
将来的には、ZopeのXMLエクスポートに頼らない機構を実装するという手もありそうだけど、とてもそこまで面倒みきれない。
ZWikiのときにも思ったのだけど、Zopeってつくづく7bit依存したプロダクトだなぁと思うことしきり。
こりゃぁ、ZopeのUnicode対応も怪しいですぜ、ダンナ。
|