感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

JavaのSVNKitで、Subversionのリポジトリを操作して、昨日から今日までのログを取得する。

<スポンサーリンク>

SVN Kit for Javaのダウンロード

以下のURLからSVN Kitをダウンロードする。
http://svnkit.com/download.php
今回は「org.tmatesoft.svn_1.7.11.standalone.zip」をダウンロードした。

ダウンロードした「svnkit-1.7.11\lib」以下のjarをプロジェクトのlibディレクトリか何かにコピーして、まずはビルドパスに追加する。
Eclipseだと、右クリック→ビルドパスで進んでいくやつだね。

SVNKit for javaJavadoc

ちょっと上でダウンロードしたやつよりもバージョンが新しいけれど、以下がJavadoc.
http://svnkit.com/javadoc/
基本的にはこのJavadocや、StackOverFlowなどを参考にコーディングする。

SVNKit for Javaを使って特定のリポジトリのログを取得するサンプル

SVNKitを使ってSubversionリポジトリからログを取得した。
ユーザー名やパスワードはISVNAuthenticationManagerを使って設定している。

package sample;

import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;

import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
import org.tmatesoft.svn.core.wc.SVNWCUtil;

public class Main {
	public static void main(String[] args) {
		String reposUrl = "http://192.168.2.1/svnrepo"; //適当
		String targetRepo = "trunk"; //適当
		String user = "sho322user"; //適当
		String password = "sho322pass"; //適当
		try {
			SVNRepository repository = SVNRepositoryFactory.create(SVNURL.parseURIDecoded(reposUrl));
			ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(user,password);
			repository.setAuthenticationManager(authManager);

			//(参考)http://www1.megaegg.ne.jp/~yasu/Programmer's%20Page/basic/date.html
			Date today = new Date();
			long todayData = today.getTime();
			long yesterdayData = todayData - (long)(24*60*60*1000);
			Date yesterday = new Date(yesterdayData);

			Long latestRevision = repository.getLatestRevision();
			Long yesterdayRevisionNo = repository.getDatedRevision(yesterday);
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日H時");
			System.out.println("昨日の今頃(" + sdf.format(yesterday) + ")から今日(" + sdf.format(today) + ")までのログを出力します");;
			System.out.println("リビジョンは:" + yesterdayRevisionNo + "から" + latestRevision + "までです。");
			Collection logEntries = null;
			logEntries = repository.log( new String[] {targetRepo}, null, yesterdayRevisionNo, latestRevision, true, true);

			for (Iterator i = logEntries.iterator(); i.hasNext();) {
				System.out.println(i.next().toString());
			}

		} catch (SVNException e) {
			e.printStackTrace();
		}
	}
}

Javaで「昨日の今頃」のDate取得するには、以下のようにする。

Date today = new Date();
long todayData = today.getTime();
long yesterdayData = todayData - (long)(24*60*60*1000);
Date yesterday = new Date(yesterdayData);

この辺は以下のサイトを参考にした。
http://www1.megaegg.ne.jp/~yasu/Programmer's%20Page/basic/date.html

上のコードを実行すると、こんな感じでログのデータが出力される。

昨日の今頃(2013年10月08日20時)から今日(2013年10月09日20時)までのログを出力します
リビジョンは:20から30までです。
20
svn:log=コミットしたよ!
svn:author=yoshikawa tomoki
svn:date=2013-10-08T20:33:10.898198Z
M /trunk/hoge.fuga
30
svn:log=適当にコミット
svn:author=yamane risako
svn:date=2013-10-08T21:32:03.994913Z
A /trunk/fuga.hoge