SVNKit の使い方 - ログ取得

Subversion 用の Pure Java ライブラリ SVNKit を使って、ログを取得してみる。(svn log のような動作を実装)

実行環境は以下の通り。

  • Groovy 1.5.6
  • SVNKit 1.1.8

事前準備として、groovy コマンドの実行時に SVNKit の svnkit.jar がロードされるように Groovy を設定しておく。(conf/groovy-starter.conf を編集する等)

ログ取得のスクリプト

working-copy ディレクトリの test.txt に関するログを取得・出力するようなスクリプトは以下の通り。

svnlog.groovy
import org.tmatesoft.svn.core.ISVNLogEntryHandler
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory
import org.tmatesoft.svn.core.wc.SVNClientManager
import org.tmatesoft.svn.core.wc.SVNRevision

FSRepositoryFactory.setup()

def manager = SVNClientManager.newInstance()
def logClient = manager.logClient

//ISVNLogEntryHandler インターフェースの実装
def logHandler = {logEntry -> println logEntry} as ISVNLogEntryHandler

logClient.doLog([new File("working-copy/test.txt")] as File[], new SVNRevision(0), SVNRevision.HEAD, true, false, 0, logHandler)

基本的な処理の流れは、SVNClientMangaer のインスタンスを取得して、用途に合った Client オブジェクトを取得し、実行する操作に対応するメソッドを呼び出す事になる。

なお、使用するプロトコルに応じた RepositoryFactory の setup() メソッドを事前に呼び出しておく点に注意。

  • svn://, svn+xxx:// の場合、org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl
  • http://, https:// の場合、org.tmatesoft.svn.core.internal.io.dav. DAVRepositoryFactory
  • file:/// (FSFS only) の場合、org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory

今回はリポジトリがローカルに存在するので FSRepositoryFactory.setup() を実行している。

実行結果例
>groovy svnlog.groovy

1 Fri Jul 18 00:14:12 JST 2008 fits
テストファイル追加
2 Fri Jul 18 00:17:09 JST 2008 fits
詳細な内容を追加
3 Fri Jul 18 00:21:11 JST 2008 fits
誤字の訂正