txtに対する操作を記録するSCMという妄想

Google Waveが操作を記録して共有するものだという話を聞いたときに、
こういうSCMが欲しいなあと思った。


もちろんリアルタイムでソースコードに対する操作を全て記録して行くとかだと
実用性は低いと思うけど、ソースコードの差分を複数の操作に分解して保存というのはアリなのではないかと。
というかそもそも現在の主要なSCMも操作を記録しているのだけど、
記録出来る操作の種類が特定行にn行挿入と、
特定箇所からのn行を削除の2種類しかないと言えるかもしれない。
ファイルのコピーをサポートしているSCMならもうちょっと増えるか。


例えばリファクタリングのメソッド抽出だったら、

  1. メソッド宣言と空ブロックからなる複数行を追加
  2. 抽出元メソッド内から抽出対象の複数行を移動
  3. 移動した行の行頭スペース数の増加
  4. (必要なら)抽出先でのreturnの追加と抽出元での代入分の変更等

などというように分解出来ると思う。
「n行挿入」×複数、「n行削除」×複数、「n行移動」、「行頭スペース数増減」と言い換えれば、
特定プログラミング言語の文法によらない操作群に分解出来る。


そうしない場合は大きな「n行挿入」と「n行削除」になってしまうと考えれば、
操作群の前後で保存される情報量が全然違うのが分かると思う。
例えばannotateで各行のコードの初出を調べるときに、
メソッド抽出が辿れるなら、本当に該当ロジックがいつ書かれたのかが即座に分かる。


また、インデントの修正が他の操作と分離して考えられるなら、
branch作成後にそれぞれコードフォーマットして、
さらにそれぞれ修正したコード同士のmergeもある程度は自動的に出来るのではないだろうか。