mercurial はpythonで書かれて、わかりやすいAPIを用意しているので、触りたいと思って、インメモリでコミットをしようとするとどうすればいいかというのを調べてみた。

mercurialは、リポジトリオブジェクト(localrepository)があって、そのしたに、チェンジコンテキスト(changectx)がって、その下に、ファイルコンテキスト(filectx)があると言う仕組みになる。触るのが意外と簡単です。

普段のmercurialはディスクにあるファイルの処理をするんですけども、インメモリの処理をするために、memctxと、memfilectx のインメモリチェンジコンテキストとファイルコンテキストが用意してあります。

勝手コミットをするとこうなります。

それで、hg update たたくと、新しいファイルができました。

$ hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

ファイルの更新は同じく新しいファイルの内容を渡せば、勝手にdiffしてくれます。