GoogleCodeにお引越し

今までリポジトリCodeReposにありましたが、ここ1週間かけてsvnsyncを敢行し、GoogleCodeに移しました。

以前からOpenCvSharpはGoogleCodeとCodeReposの2つのページがあってよくわからない状況になっていました。これには事情があって、最初はCodeReposで、と思っていたもののなかなか加入申請の返事が来ず、じゃあ諦めてGoogleCodeで、と思いこのページを作りました。
http://code.google.com/p/opencvsharp/
しかしこのページがほぼ完成した頃になってCodeReposの加入の知らせが来て、CodeReposの方がレスポンスが軽快だし・・・とそちらに流れてしまった、という経緯になっています。

結局そのまま半年以上経ってしまったわけですが、GoogleCodeの方が(特に海外の方に)参加してもらいやすいかなと思うので移すことにしました。

svnsyncの備忘録

CodeReposからGoogleCodeへリポジトリをコピーするため、svnsyncを使いました。その手順の備忘録。

問題1. GoogleCodeのリポジトリをリセット

svnsyncはSubversion1.4から追加された機能で、あるリポジトリと同期したリポジトリを作ることができます。簡単に言うとコピーができるということです。以前だと、

svnadmin dump

を使ったりするところですが、これは見ての通りリポジトリのadminでなければならず、当然私はCodeReposのただのコミッタでしかないので無理です。しかしsvnsyncはチェックアウトできる権限さえあれば可能で、今回の場合にぴったりです。ということでsvnsyncを使ってGoogleCodeにリポジトリをコピーします。

しかしここで問題、コピー先のリポジトリは作りたてほやほやの何もないリポジトリでなければなりませんが、GoogleCodeは初期状態でtrunkが用意されたりしていてその条件を満たしていません。こんな時のため、GoogleCodeにはリポジトリをまっさらにする機能があります。上のメニューから"Source"を選ぶと、出てくる画面の下の方にこんなことが書いてあります。

そこの英語にそのものズバリ「svnsyncにより既存のコードの履歴をアップロードすることができるように、あなたはこのリポジトリをリセットできます」と書いてあります。ということで、このリンクを押してリセットすればこの問題は解決。

問題2. svnsyncが途中で死んだときの対処

リセットしたら、次にsvnsync用にGoogleCodeのリポジトリを初期化します。svnsync init コピー先 コピー元 と指定します。

svnsync init https://opencvsharp.googlecode.com/svn http://svn.coderepos.org/share/lang/cpluspluscli/OpenCvSharp

"Copied properties for revision 0."のように表示されたら成功です。(日本語版だと「リビジョン0の属性をコピーしました。」とか表示されたはず)

そして以下のコマンドで同期を開始します。GoogleCodeが重いせいで途方もない時間がかかります(24時間フル稼働でrevisionが5000〜6000しか進みません)。

svnsync sync https://opencvsharp.googlecode.com/svn


あとは丸1週間放置でいいかなー、と思ったのも束の間、2時間後ぐらいにエラーを吐いて停止。SSLの証明書がダメだった云々と表示されました。仕方なく再度実行するものの、

Failed to get lock on destination repos, currently held by 'servername:XXXXX'
svnsync: Couldn't get lock on destination repos after 10 attempts

というエラーが。どうもロックがかかったまま止まったようで、解除しなければなりません。解除は以下のコマンドで。

svn propdel svn:sync-lock --revprop -r 0 https://opencvsharp.googlecode.com/svn

これで、"property 'svn:sync-lock' deleted from repository revision 0"のように表示され、ロックが解除されます。これでsvnsyncを再度実行すれば、中断した箇所から再開できます。


この1週間は、落ちてないかどうか日中しばしばチェックするのはもちろん、夜中も2時間おきぐらいに起きて見てました。これは相当しんどいので、何かバッチを書いて自動化すべきだったと思います。


Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)