2011年5月26日木曜日

EclipseでCVSにコミットできない

(この記事を読むのにかかる時間:約3分30秒)
とある開発案件で、自分の担当プログラムのソースをEclipseからリモートのCVSサーバーにコミットしようとしても「サーバーの応答を受信中」といった表示がずっと出るだけで一向にコミットできない(CVSサーバーを再起動してもダメ)という症状が出た。
数日間、コミットできないまま放置していたんだけど、いよいよ納期的にコミットしないとマズイ時期にきて、ようやく調べて解決したので、やったことのメモ。

この記事の対象

あんま、CVSとかよくわかってないけどソース管理に便利だから(っていうか参加した開発プロジェクトで使ってるから)使っている人。
で、CUIコマンドはイケる人。

環境

クライアントOS:Windows XP SP3
Eclipse: Helios Service Release 2 (All in oneの楽々パック)
サーバーOS:Red Hat Enterprise Linux AS release 4(Nehant update 4)
CVSサーバー:上記に標準で入っているもの

症状

特定の自作Javaパッケージのみ、EclipseからGUIのメニューでコミットしようとしても「サーバーの応答を受信中」のままずっとコミットが完了しない。
CVSサーバー(およびOS)を再起動してもダメ。

原因

他の人がロックしてた。
(分かってみれば、ただそれだけのこと…)

調査方法(というか、やったこと)

Telnetでサーバーに自分のユーザーでログインし、CVSクライアント環境を構築。
$export CVSROOT=:local:/export/home/public/cvs[Enter] ←CVSのリポジトリ
$env[Enter] ←環境変数にCVSROOTが設定されたか確認
 :
CVSROOT=:local:/export/home/public/cvs
$cvs checkout MyProject[Enter]

これでガサっとプロジェクトをCVSクライアント環境にチェックアウトできた。
とりあえず状態を見てみる。

$cd MyProject[Enter]
$cd src/jp/hoge/test[Enter]
$cvs status Test.java[Enter] ←状態確認。ここでは特に問題なし。

次に対象のファイルを、コマンドでコミットしてみて何か詳細なメッセージが出ないか試してみる。
vi等でコメントなどをつけて適当に編集し、コミット。

$cvs diff Test.java[Enter] ←一応、差分を確認
$cvs commit Test.java -m "Test dayo!" ←コミット!

すると、何やらメッセージが・・・

Waiting for suzuki's lock...
(メッセージ内容はうろ覚え)

・・・誰か他の人(例ではスズキさん)がファイルをロックしているらしい。
スズキさんに確認するも、「まったく身に覚えがない」ということだったので(実は今回のプロジェクトメンバーの中で一番スキルが高い子)、まぁ何かがどうにかなってそうなってしまったんだろう、ということでロックファイルを削除。

今回コミットできなかったのはパッケージなので、cvsリポジトリのディレクトリに移動して、該当のプロジェクトのディレクトリの中を ls コマンドで見てみたら、確かにオーナーが「suzuki」の「#cvs.rfl.hostname.3131」という、それっぽいファイルが存在している。
このファイルを、rootユーザーにお願いしてリネームしてもらった(いきなり削除する勇気はなかった)ところ、無事、Eclipseからコミットすることが出来た。


結論

Eclipseが、「サーバーの応答を受信中」の他に「Waiting for suzuki's lock~」のくだりを表示してくれたら、すぐわかった話(「詳細」にも出てこないんだもん)。
普段使う分にはあまりに便利すぎるツールだけど、こういうエラーの時は(ボクみたいによく知らずに使っていると)結構大変だよね。


しかし、All in Oneに入ってるDB用のプラグイン「DB Viewer」が泣きたくなるほど便利(Oracleとの接続で利用)。AccessっぽいGUIでのデータ編集が出来るのはもちろん、PL/SQLのコンパイルとかもEclipse上で出来ちゃうし、先月まで参加していた「TeratermとSQL*Plusでがんがる!」というプロジェクトの環境とは、まさに天と地の差…。

0 件のコメント: