業務で今回のプロジェクトで追加したリソースを調査しなければならなくなった。
ただ、単純にSVNのヒストリーやリビジョンの比較をして目を酷使するのも嫌だったの で、
Javaからどうにかプログラミングが出来ないかとググってみた。
あった。
チェコのTMATE SOFTWAREという企業が公開しているSVNKitというJavaライブラリであ る。(チェコは良い仕事する気がする)
(っていうかみんな知ってるのかな。僕は若手なのでベテランの人にとってはイマサラ感 があるやもしれん。)
Pure JavaでSVN接続及び操作が出来るライブラリである。
そのほかにもSVN関連ではJavaHLなどがあるそうだが、
JNIとか不慣れなので、そこはやめておいた。
これを使えば、ヒストリから取りたいデータだけを判別して取得することも出来る!気 がする!
ということで、作った。時間にして5~6時間で出来たかな。
リポジトリの作成はこれだけ。
/** * リポジトリ作成 * * @param repoURL * リポジトリのURL文字列 * @return リポジトリ SVNRepository */ public static SVNRepository createRepository(String repoUrl) throws SVNException { SVNURL url = SVNURL.parseURIEncoded(repoUrl); DAVRepositoryFactory.setup(); return SVNRepositoryFactory.create(url); }超簡単。 ユーザー認証もこれだけ。
/** * ユーザー認証 * * @param name * @param pass */ public static void auth(String name, String pass) { ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(name, pass); MySVNKitExecuter.repository.setAuthenticationManager(authManager); }超簡単。 情報の取得はこれだけ。
SVNProperties dirProps = new SVNProperties(); List<SVNDirEntry> dirEntries = new ArrayList<SVNDirEntry>(); int headRevision = -1; // 指定ディレクトリの取得 MySVNKitExecuter.repository.getDir(dirName, headRevision, dirProps, dirEntries);ほんと簡単。
ちらっとサンプルソースを見て、自分で勝手にオレオレクラスを作ったので、
もしかしたら、ライブラリの方のクラス使ったほうが賢いかもしれません。
処理内容
ユーザー認証
↓
リポジトリの情報取得
↓
自前のBeanにディレクトリの情報とファイル情報を詰め込む
↓
指定したユーザーの更新したファイル情報だけファイル出力する
とりあえずこんな感じで実装してみました。
ライブラリ自体はとても簡単に利用することが出来た。
個人的に困ったのはむしろロジック(再帰処理)のほうであった笑
はじめはDOSからメインクラスを叩こうと思ったのだけれど、
クラスパス通したりが面倒になり、J-Unitから実行。
見事な手抜きっぷりである。
0 件のコメント:
コメントを投稿