Subversiveのファイルロックに問題あり

Subversive 1.1.9_02で、既にロックされているファイルをロックした場合、エラーのフィードバックがされないという問題を発見。ちなみに、ダイアログが出ないだけでなく、SVNコンソール上にもエラーが表示されない。

調べてみたところ、Subversive 1.1.9_02が内部的に利用しているSVNKit 1.1.4の実装*1に問題がある模様。具体的にはorg.tmatesoft.svn.core.wc.SVNWCClientのdoLock(File[], boolean, String)メソッドにおいて、エラーがあった場合に、そのエラーをSVNErrorManagerに追加していないのが問題と思われる。ということで、以下のように修正してみた。

if (error == null) {
    (省略)
 } else {
    SVNErrorManager.error(error);  // この行を追加
    handleEvent(SVNEventFactory.createLockEvent(dir, lockInfo.myFile.getName(), SVNEventAction.LOCK_FAILED, lock, error), 
            ISVNEventHandler.UNKNOWN);
}

なお、このパッチを当てたSubversive 1.1.9_02は、以下から入手可能。

また、最新のSVNKitでもこの部分のソースは変更されていないようなので、とりあえず上記のパッチをSVNKitのIssueTrackerに投げてみた。

*1:ちなみに、Subversiveに添付されているSVNKitのソースは、本家のものに手を加えている模様。おかげで、動作確認のためのビルド環境を作るのにひと苦労。