Connecting to SVN with Scala/Java

August 2011 ยท 2 minute read

I needed to do some SVN scraping recently to automate the detection of certain areas of code and this is what I learned.

Libraries

SVNKit was too low level for my(and I suggest most) needs. I found I was writing quite a bit of code for relatively simple actions.

SvnClientAdapter provides a simplified interface for either the cmd line client, SVNJavahl or SVNKit. Its my recommendation that for most projects this is the best way to go. In my case I used SVNJavaHL as my low level SVN library.

Download

The SVNClientAdaptor library were hard at the time of writing but are available as dependencies in the related Apache project SVNAnt: subclipse.tigris.org/source/browse/subclipse/trunk/svnant/lib.

Usage: Setup

I was working in Scala for my project but the conversion to Java is trivial.

	SvnKitClientAdapterFactory.setup();
	//To create the SVN client we first need to tell it what type of client to use.
	//Letting it choose whatever is availiable is usually fine unless you have both
	//and want to force it to use something specific
	val clientType\:String = SVNClientAdapterFactory.getPreferredSVNClientType();
	val svnClient\:ISVNClientAdapter = SVNClientAdapterFactory.createSVNClient(clientType);

	//add whatever authentication your repositor requires(if any)
	svnClient.setUsername("<your user name>");
	svnClient.setPassword("<your password>");

Usage

Now that we have a svn client object we can do some work. If your familiar with SVN this part very straight forward. In my case I was listing directories and searching for files.

var svnDirs\: Array[ISVNDirEntry] = svnClient.getList(new SVNUrl("<SVN repository URL>"), SVNRevision.HEAD, false)

Conclusion

This is a short post because its a short topic. Once you’ve got your libraries in the classpath and the client instantiated its smooth sailing. Automating SVN mapping, organization and monitoring can save you a lot of time in a big organization/repository.