時間がかかりましたorz
何やってたかというと titleどおりなんですが、rubyの repositoryをまるっと mercurial用に変換してみたのでした。
先日、ircで rubyの repositoryを hg convertするとうまくいかないという話を聞き(というか読み)、じゃあ最近 hgつかってるから debugにいいかな〜と思ってチャレンジしてみたわけです。
最初、hg convert http://svn.ruby-lang.org/repos/ruby/trunk ruby だけしてみた時はすんなり動いたので報告してみると「trunkだけでは足りない」って御言葉が。というわけでじゃあ単純にでかくなるだけだろーと思って始めてみたわけですが。
時間がかかるので放置していたら、
hgext/convert/subversion.py: libsvn._core.SubversionException: ('child raised exception', 175002)とかなんかで .pyが例外で落ちてるわけです。しかも普通に cPickle.load(stdout)してるだけなんですな。こりゃ実は何か隱れた bugか?と喜んで(喜ぶなよ)今度は(片手でFFXIやりながら)画面をみていると、swapがごりごりいってるわけです。で、はたと。cPickleさんがコケるのはもしやして memoryまわりか?と。
そんでまぁ適当に使わない applicationおとして試してみてもまだmemory fullになる。こりゃ実は memory eatで暴走か?とかおもって出来る限り memoryをあけて(OSXで1.7GBあけてみた) try. すると最大1.6GBちょい(本当にギリギリ)を時々消費してるんですな。なにか sortか searchかしてるんでしょう。ぐわっと heapとって見てはまた数十MBにもどり、また1GB over食っては戻り、を繰り返して今度はなんとか passしそうな感じに。
で。それを一晩放置して朝おきて。まだおわってないので放置して晩になり。とだいたい丸1日消費して、hg convertは無事おわったのでした。 hg logも hg clone --revも動いたので、まぁひっぱるのはokかな?
そんな感じで、Subversionから Mercurialへ hg convertをする場合、空きメモリには要注意してくださいという話でした。Python+swigでメモリ不足なことって初体験だったわけですが、良い回避or検出方法ってないものですかね。
