<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Cheesy Title</title>
	
	<link>http://www.justinedelson.com/blog</link>
	<description />
	<lastBuildDate>Thu, 03 Jul 2008 18:53:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CheesyTitle" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="cheesytitle" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Hudson Twitter Plugin 0.2 Released</title>
		<link>http://www.justinedelson.com/blog/2008/07/03/hudson-twitter-plugin-02-released/</link>
		<comments>http://www.justinedelson.com/blog/2008/07/03/hudson-twitter-plugin-02-released/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 18:53:04 +0000</pubDate>
		<dc:creator>justin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.justinedelson.com/blog/?p=15</guid>
		<description><![CDATA[I released a new version of the Twitter plugin for Hudson today. You can see the details at http://hudson.gotdns.com/wiki/display/HUDSON/Twitter+Plugin.
This is the third plugin I&#8217;ve written in whole or part and I continue to be extremely impressed with Hudson&#8217;s extensibility. I&#8217;ve got some other ideas, but I think I&#8217;m going to put those on hold and [...]]]></description>
			<content:encoded><![CDATA[<p>I released a new version of the Twitter plugin for Hudson today. You can see the details at <a href="http://hudson.gotdns.com/wiki/display/HUDSON/Twitter+Plugin" onclick="pageTracker._trackPageview('/outgoing/hudson.gotdns.com/wiki/display/HUDSON/Twitter+Plugin?referer=');">http://hudson.gotdns.com/wiki/display/HUDSON/Twitter+Plugin</a>.</p>
<p>This is the third plugin I&#8217;ve written in whole or part and I continue to be extremely impressed with Hudson&#8217;s extensibility. I&#8217;ve got some other ideas, but I think I&#8217;m going to put those on hold and instead concentrate on building out a library for unit testing plugins as I seem to be running into the same issues over and over again.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=ZFKT7HmmHO0:UbFYgenZlbM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=ZFKT7HmmHO0:UbFYgenZlbM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=ZFKT7HmmHO0:UbFYgenZlbM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=ZFKT7HmmHO0:UbFYgenZlbM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=ZFKT7HmmHO0:UbFYgenZlbM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=ZFKT7HmmHO0:UbFYgenZlbM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=ZFKT7HmmHO0:UbFYgenZlbM:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.justinedelson.com/blog/2008/07/03/hudson-twitter-plugin-02-released/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JRuby Cookbook available for Pre-Order</title>
		<link>http://www.justinedelson.com/blog/2008/06/04/jruby-cookbook-available-for-pre-order/</link>
		<comments>http://www.justinedelson.com/blog/2008/06/04/jruby-cookbook-available-for-pre-order/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 22:42:38 +0000</pubDate>
		<dc:creator>justin</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[o'reilly]]></category>

		<guid isPermaLink="false">http://www.justinedelson.com/blog/?p=13</guid>
		<description><![CDATA[In case you didn&#8217;t notice the sidebar links, Henry Liu and I are wrapping up a JRuby Cookbook for O&#8217;Reilly and it&#8217;s up on Amazon for pre-order
]]></description>
			<content:encoded><![CDATA[<p>In case you didn&#8217;t notice the sidebar links, Henry Liu and I are wrapping up a JRuby Cookbook for O&#8217;Reilly and it&#8217;s up on Amazon for <a href="http://www.amazon.com/gp/product/059651980X?ie=UTF8&#038;tag=cheetitl-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=059651980X" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/gp/product/059651980X?ie=UTF8_038_tag=cheetitl-20_038_linkCode=as2_038_camp=1789_038_creative=9325_038_creativeASIN=059651980X&amp;referer=');">pre-order</a><img src="http://www.assoc-amazon.com/e/ir?t=cheetitl-20&#038;l=as2&#038;o=1&#038;a=059651980X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=AUs5lCzqQZY:5qNq6humg5M:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=AUs5lCzqQZY:5qNq6humg5M:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=AUs5lCzqQZY:5qNq6humg5M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=AUs5lCzqQZY:5qNq6humg5M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=AUs5lCzqQZY:5qNq6humg5M:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=AUs5lCzqQZY:5qNq6humg5M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=AUs5lCzqQZY:5qNq6humg5M:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.justinedelson.com/blog/2008/06/04/jruby-cookbook-available-for-pre-order/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Using Xvnc within Hudson to run FlexUnit tests</title>
		<link>http://www.justinedelson.com/blog/2008/06/04/using-xvnc-within-hudson-to-run-flexunit-tests/</link>
		<comments>http://www.justinedelson.com/blog/2008/06/04/using-xvnc-within-hudson-to-run-flexunit-tests/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 22:38:43 +0000</pubDate>
		<dc:creator>justin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.justinedelson.com/blog/?p=11</guid>
		<description><![CDATA[Like most people unit testing Flex applications with FlexUnit in a Continuous Integration environment, I&#8217;ve based our setup on Peter Martin&#8217;s blog post from January 2007. In it, he describes one of the core challenges of this type of configuration: the fact that the CI server is likely headless. Martin&#8217;s solution is to use Xvfb. [...]]]></description>
			<content:encoded><![CDATA[<p>Like most people unit testing Flex applications with FlexUnit in a Continuous Integration environment, I&#8217;ve based our setup on Peter Martin&#8217;s <a href="weblogs.macromedia.com/pmartin/archives/2007/01/continous_integ.cfm">blog post</a> from January 2007. In it, he describes one of the core challenges of this type of configuration: the fact that the CI server is likely headless. Martin&#8217;s solution is to use <a href="http://www.x.org/archive/X11R6.8.2/doc/Xvfb.1.html" onclick="pageTracker._trackPageview('/outgoing/www.x.org/archive/X11R6.8.2/doc/Xvfb.1.html?referer=');">Xvfb</a>. And this works fine.</p>
<p><b>But</b> <a href="https://hudson.dev.java.net/" onclick="pageTracker._trackPageview('/outgoing/hudson.dev.java.net/?referer=');">Hudson</a> can do better because someone (<a href="http://weblogs.java.net/blog/kohsuke/" onclick="pageTracker._trackPageview('/outgoing/weblogs.java.net/blog/kohsuke/?referer=');">Kohsuke</a>, I assume) wrote a plugin for Xvnc. Simply install the plugin and check the checkbox in the job configuration screen:<br />
<img src="http://www.justinedelson.com/blog/wp-content/uploads/xvnc_box.jpg" alt="" title="xvnc_box" width="500" height="78" class="aligncenter size-full wp-image-12" /></p>
<p>Hudson will then automatically start up a Xvnc session and set the <code>DISPLAY</code> environment variable to the appropriate value and then shut down the session when the build is complete. One advantage this has over the Xvfb method is that if you have multiple Flex projects building simultaneously, each build has its own X session. While this has yet to be an issue for our projects, it seems like a good idea. The architecture of FlexUnit actually makes simultaneous builds a bit tricky. In another post, I&#8217;ll cover how Hudson can solve this problem too.</p>
<p>A word of warning:<br />
Before using this plugin, you obviously have to have Xvnc installed. What&#8217;s less obvious (although sensible) is that you must also set a password. You do this by running:<br />
<code>$ vncpassword</code><br />
This has to be done as the same user Hudson runs as.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=t_DMO2xua3I:pIphtTblH7g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=t_DMO2xua3I:pIphtTblH7g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=t_DMO2xua3I:pIphtTblH7g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=t_DMO2xua3I:pIphtTblH7g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=t_DMO2xua3I:pIphtTblH7g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=t_DMO2xua3I:pIphtTblH7g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=t_DMO2xua3I:pIphtTblH7g:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.justinedelson.com/blog/2008/06/04/using-xvnc-within-hudson-to-run-flexunit-tests/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>FlexUnit reports in Hudson</title>
		<link>http://www.justinedelson.com/blog/2008/06/01/flexunit-reports-in-hudson/</link>
		<comments>http://www.justinedelson.com/blog/2008/06/01/flexunit-reports-in-hudson/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 19:34:09 +0000</pubDate>
		<dc:creator>justin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.justinedelson.com/blog/?p=8</guid>
		<description><![CDATA[As a follow-up to my post about using the FlexUnit results produced by the flex-mojos Maven plugin to produce a unit test report, I wanted to point out that this same technique can be used within the Hudson continuous integration server.
Here&#8217;s what the config looks like:

(Note that we&#8217;re also using Hudson&#8217;s JavaDoc support to publish [...]]]></description>
			<content:encoded><![CDATA[<p>As a follow-up to <a href="http://www.justinedelson.com/blog/2008/05/29/generating-flexunit-test-reports-with-flex-mojos/">my post</a> about using the FlexUnit results produced by the flex-mojos Maven plugin to produce a unit test report, I wanted to point out that this same technique can be used within the <a onclick="pageTracker._trackPageview('/outgoing/hudson.dev.java.net?referer=');pageTracker._trackPageview('/outgoing/hudson.dev.java.net?referer=http://www.justinedelson.com/blog/wp-admin/edit.php');" href="https://hudson.dev.java.net">Hudson</a> continuous integration server.</p>
<p>Here&#8217;s what the config looks like:</p>
<p><a rel="lightbox" href="http://www.justinedelson.com/blog/wp-content/uploads/hudson-config.jpg"><img class="aligncenter size-medium wp-image-9" title="hudson-config" src="http://www.justinedelson.com/blog/wp-content/uploads/hudson-config-300x95.jpg" alt="" width="300" height="95" /></a></p>
<p>(Note that we&#8217;re also using Hudson&#8217;s JavaDoc support to publish the produced ASDoc).</p>
<p>This gives you all the nice Hudson unit testing support like graphs of tests per build:</p>
<p><a href="http://www.justinedelson.com/blog/wp-content/uploads/hudson-test-results.jpg" rel="lightbox[8]"><img class="aligncenter size-full wp-image-10" title="hudson-test-results" src="http://www.justinedelson.com/blog/wp-content/uploads/hudson-test-results.jpg" alt="" width="500" height="216" /></a></p>
<p><strong>UPDATE</strong> &#8211; With the Flex Mojos 1.0 release, the output directory for FlexUnit tests has changed. It&#8217;s now <code>surefire-reports</code>, so the Test report XMLs value should be <code>**/target/surefire-reports/*.xml</code>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=rgscFF1wkU8:N-4-sh9Og9Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=rgscFF1wkU8:N-4-sh9Og9Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=rgscFF1wkU8:N-4-sh9Og9Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=rgscFF1wkU8:N-4-sh9Og9Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=rgscFF1wkU8:N-4-sh9Og9Y:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=rgscFF1wkU8:N-4-sh9Og9Y:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=rgscFF1wkU8:N-4-sh9Og9Y:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.justinedelson.com/blog/2008/06/01/flexunit-reports-in-hudson/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Generating FlexUnit Test Reports with Flex Mojos</title>
		<link>http://www.justinedelson.com/blog/2008/05/29/generating-flexunit-test-reports-with-flex-mojos/</link>
		<comments>http://www.justinedelson.com/blog/2008/05/29/generating-flexunit-test-reports-with-flex-mojos/#comments</comments>
		<pubDate>Thu, 29 May 2008 08:56:27 +0000</pubDate>
		<dc:creator>justin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.justinedelson.com/blog/?p=5</guid>
		<description><![CDATA[The flex-mojos project supports unit testing of Flex code, but it doesn&#8217;t use Maven&#8217;s default surefire plugin for running tests. As a result, you need to make a slight tweak to your pom.xml file:

&#60;reporting&#62;
  &#60;plugins&#62;
    &#60;plugin&#62;
      &#60;groupId&#62;org.apache.maven.plugins&#60;/groupId&#62;
      &#60;artifactId&#62;maven-surefire-report-plugin&#60;/artifactId&#62;
    [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://code.google.com/p/flex-mojos/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/flex-mojos/?referer=');">flex-mojos</a> project supports unit testing of Flex code, but it doesn&#8217;t use Maven&#8217;s default <a href="http://maven.apache.org/maven-surefire-plugin/" onclick="pageTracker._trackPageview('/outgoing/maven.apache.org/maven-surefire-plugin/?referer=');">surefire</a> plugin for running tests. As a result, you need to make a slight tweak to your <code>pom.xml</code> file:</p>
<pre class="brush: xml;">
&lt;reporting&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
      &lt;artifactId&gt;maven-surefire-report-plugin&lt;/artifactId&gt;
      &lt;configuration&gt;
        &lt;reportsDirectory&gt;${project.build.directory}/test-reports&lt;/reportsDirectory&gt;
      &lt;/configuration&gt;
  &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/reporting&gt;
</pre>
<p>Here&#8217;s some sample output:<br />
<a href='http://www.justinedelson.com/blog/wp-content/uploads/surefire-report-from-flex.png' rel='lightbox'><img src="http://www.justinedelson.com/blog/wp-content/uploads/surefire-report-from-flex-150x150.png" alt="" title="surefire-report-from-flex" width="150" height="150" class="aligncenter size-thumbnail wp-image-6" /></a></p>
<p><strong>UPDATE</strong> &#8211; With the Flex Mojos 1.0 release, the output directory for FlexUnit tests has changed. It&#8217;s now <code>surefire-reports</code>, so you can simply include the surefire-report plugin in your pom.xml file without any configuration:</p>
<pre class="brush: xml;">
&lt;reporting&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
      &lt;artifactId&gt;maven-surefire-report-plugin&lt;/artifactId&gt;
  &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/reporting&gt;
</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=UkmTQSL4k1M:ER_U07B_cYA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=UkmTQSL4k1M:ER_U07B_cYA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=UkmTQSL4k1M:ER_U07B_cYA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=UkmTQSL4k1M:ER_U07B_cYA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=UkmTQSL4k1M:ER_U07B_cYA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=UkmTQSL4k1M:ER_U07B_cYA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=UkmTQSL4k1M:ER_U07B_cYA:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.justinedelson.com/blog/2008/05/29/generating-flexunit-test-reports-with-flex-mojos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Working with SVNKit</title>
		<link>http://www.justinedelson.com/blog/2008/05/27/working-with-svnkit/</link>
		<comments>http://www.justinedelson.com/blog/2008/05/27/working-with-svnkit/#comments</comments>
		<pubDate>Tue, 27 May 2008 21:39:35 +0000</pubDate>
		<dc:creator>justin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svnkit]]></category>

		<guid isPermaLink="false">http://www.justinedelson.com/blog/?p=3</guid>
		<description><![CDATA[We&#8217;re doing a big project at work that involves splitting up a large codebase into lots of little projects. The general methodology is:

Create a new directory in Subversion.
Copy some stuff from the main codebase into the new directory.
Compile/fix
Package
Delete files from the codebase and replace with the packaged jar.

One of the problems that&#8217;s come up is [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re doing a big project at work that involves splitting up a large codebase into lots of little projects. The general methodology is:</p>
<ol>
<li>Create a new directory in Subversion.</li>
<li>Copy some stuff from the main codebase into the new directory.</li>
<li>Compile/fix</li>
<li>Package</li>
<li>Delete files from the codebase and replace with the packaged jar.</li>
</ol>
<p>One of the problems that&#8217;s come up is that the codebase is a moving target; people not involved in the extraction are making change all the time. I use Fisheye notifications to let me know when a change has been made to the codebase, but that requires me to remember to set up the notification.</p>
<p>So I decided to write a Maven plugin that would iterate through all the files in the extraction target directory and see if there are newer versions in the codebase. This means getting the info per file up until the point it was copied and then checking the URL the file was copied from to see if there are newer revisions.</p>
<p>I started doing this by passing calling the Subversion command line client with the &#8211;xml option and then using some XPaths to extract the necessary bits. There were two problems with this approach:</p>
<ul>
<li>svn and svadmin had to be on the path</li>
<li>the code wasn&#8217;t readable</li>
</ul>
<p>The former wasn&#8217;t that big a deal locally, but when I committed the unit test that used svnadmin, the tests failed on the CI server because svnadmin wasn&#8217;t on the path. The second was obvious while I was writing the code, but figured I&#8217;d deal with it later.</p>
<p>Rather than have svnadmin added to the path, I took a look at <a href="http://www.svnkit.com" onclick="pageTracker._trackPageview('/outgoing/www.svnkit.com?referer=');">svnkit</a> and found the API to be pretty clean. Things I really like (in no particular order):</p>
<ul>
<li>Very OO.</li>
<li>Defaults to using the default Subversion authentication store.</li>
<li>Good use of File objects &#8211; cut way down on calls to file.getAbsolutePath()</li>
<li>Really helpful for unit testing &#8211; e.g. SVNURL objects can be compared against one another</li>
</ul>
<p>Things I didn&#8217;t like:</p>
<ul>
<li>Wasn&#8217;t super-intuitive what methods were in which Client class &#8211; why is doInfo() in SVNWCClient and not in, say, SVNLogClient</li>
<li>Methods could be overloaded more with defaults that matched the command-line</li>
<li>SVNWCClient.doAdd() only accepts one File at a time</li>
<li>Latest version isn&#8217;t in Maven Central</li>
</ul>
<p>But the biggest issue is speed, at least it seems to be. It sure seems slower when running my unit tests in Eclipse, but Hudson doesn&#8217;t show a big difference. Build #13 is when I introduced a minimal about of svnkit just to get svnadmin functionality working. Build #20 is all svnkit and is actually a few seconds faster. I&#8217;ll have to look more at this going forward.</p>
<p><a href='http://www.justinedelson.com/blog/wp-content/uploads/buildtimegraph.png' rel="lightbox[3]"><img src="http://www.justinedelson.com/blog/wp-content/uploads/buildtimegraph-300x240.png" alt="" title="buildtimegraph" width="300" height="240" class="aligncenter size-medium wp-image-4" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=OR24OVY8fLo:bm3SqzV6unk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=OR24OVY8fLo:bm3SqzV6unk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=OR24OVY8fLo:bm3SqzV6unk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=OR24OVY8fLo:bm3SqzV6unk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=OR24OVY8fLo:bm3SqzV6unk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/CheesyTitle?a=OR24OVY8fLo:bm3SqzV6unk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/CheesyTitle?i=OR24OVY8fLo:bm3SqzV6unk:gIN9vFwOqvQ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.justinedelson.com/blog/2008/05/27/working-with-svnkit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
