読者です 読者をやめる 読者になる 読者になる

SVNKitの使い方

[programming]
スポンサーリンク

Pure Javaで作られたSubversionクライアントのSVNKitを使ってみたくて、下記のURLにあるサンプルを読んでみたのですが、手間多すぎる…

Commit.javaや、Export.java試してみて、実際動いたけど、こんな面倒なハズは、、と思って調べてみると、どうも org.tmatesoft.svn.core.wc.SVNBasicClient のサブクラスとして、一通りSVNの操作が出来るようなクラスが揃っていました。
例えば、checkout,update,exportは、SVNUpdateClientを使うと簡単に出来ます。

とりあえずexportを行うクラスを書いてみました。とりあえず動いたというレベルです。。

import java.io.File;

import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc.SVNUpdateClient;
import org.tmatesoft.svn.core.wc.SVNWCUtil;

public final class SVNUtils {

  public static void main(String[] args) {
    try {
      SVNUtils.export(
              "http://selenium-extension.googlecode.com/svn/trunk/user-extension",
              "work/user-extension", null, null);
    } catch (SVNException e) {
      e.printStackTrace();
    }
  }

  public static void export(String svnUrl, String dist, String userName,
      String password) throws SVNException {

    setupLibrary();

    SVNUpdateClient client = createSVNClientManager(userName, password)
        .getUpdateClient();

    client.doExport(SVNURL.parseURIEncoded(svnUrl), new File(dist),
        SVNRevision.HEAD, SVNRevision.HEAD, null, false, true);
  }

  private static SVNClientManager createSVNClientManager(String userName,
      String password) {
    return SVNClientManager.newInstance(SVNWCUtil
        .createDefaultOptions(true), userName, password);
  }

  private static void setupLibrary() {
    // For using over http:// and https://
    DAVRepositoryFactory.setup();

    // For using over svn:// and svn+xxx://
    SVNRepositoryFactoryImpl.setup();

    // For using over file:///
    FSRepositoryFactory.setup();
  }
}