漏洩には気をつけろ!

Subversion がファイルのテキストかバイナリかを判断する際のバグ(?)に遭遇。

漏洩には気をつけろ!

以上を記述しただけのファイルを仮に leak.txt として任意リポジトリのワーキングコピー配下に保存。
該当リポジトリに追加する。

$ svn add leak.txt
A  (bin)  leak.txt

ちょwwwおまwwww
なんでバイナリなの?



文脈マージが可能かどうかを決めるのに、Subversionsvn:mime-type属性を調べます。もしファイルが svn:mime-type属性を持たないか、テキストを示すような内容であれば(たとえば、text/*)、Subversion はそれをテキストであると判断します。それ以外の場合、ファイルはバイナリであるとみなされます。Subversionsvn import とsvn add 実行時に、バイナリ検出アルゴリズムを実行することでユーザを助けます。これらのコマンドは、良い推測を行い、(可能なら)バイナリのsvn:mime-type 属性を追加されるファイルに設定します。(もし Subversion の推測が間違っていた場合は、ユーザはいつでも手でその属性を削除することができます)

上述の内容から、
leak.txt のsvn:mime-type属性を調べてみる。

$ svn propget svn:mime-type leak.txt
application/octet-stream

・・・とにかく Subversion が leak.txt をバイナリデータとしてみなしていることは明白。
理由はわからんが、このままでは気持ち悪い。
こう、
なんか、
バイト中、小学生に
「あのヒト髪型変!!」
と大声で言われてもなお、
笑顔でいたあの頃の自分くらい気持ち悪い。
svn diffも取れないし。
で、
ひとまず対処療法。
Subversion によるバージョン管理::バイナリファイルと変換」の内容にあるとおり
この svn:mime-type 属性を手で変えてやりましょう。

$ svn propset svn:mime-type text/plain leak.txt
property 'svn:mime-type' set on 'leak.txt'
$ svn propget svn:mime-type leak.txt
text/plain

これで悲劇の leak.txt のテキスト化が高らかに宣言されました。
もしくは、

$ svn propdel svn:mime-type leak.txt
$ svn propget svn:mime-type leak.txt
$

これで svn:mime-type 属性を消しちゃっても svn diff を取ることができるようになります。

ちなみに、

洩に

だけで Subversionがバイナリと判断することが判明。
なぜか?
その理由はあなたが解き明かしてください!