/*\r
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>\r
+ * Copyright (C) 2007-2012 Argeo GmbH\r
*\r
* Licensed under the Apache License, Version 2.0 (the "License");\r
* you may not use this file except in compliance with the License.\r
* See the License for the specific language governing permissions and\r
* limitations under the License.\r
*/\r
-\r
package org.argeo.slc.lib.svn;\r
\r
import java.io.File;\r
import java.util.List;\r
import java.util.Vector;\r
\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
import org.argeo.slc.SlcException;\r
import org.argeo.slc.deploy.VersioningDriver;\r
+import org.tmatesoft.svn.core.SVNDepth;\r
import org.tmatesoft.svn.core.SVNException;\r
import org.tmatesoft.svn.core.SVNURL;\r
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;\r
import org.tmatesoft.svn.core.io.SVNRepository;\r
import org.tmatesoft.svn.core.wc.SVNClientManager;\r
import org.tmatesoft.svn.core.wc.SVNRevision;\r
+import org.tmatesoft.svn.core.wc.SVNWCUtil;\r
import org.tmatesoft.svn.core.wc.admin.ISVNChangeEntryHandler;\r
import org.tmatesoft.svn.core.wc.admin.SVNChangeEntry;\r
\r
+/** Versioning driver with a Subversion backen, based on SVNKit */\r
public class SvnKitDriver implements VersioningDriver {\r
+ private final static Log log = LogFactory.getLog(SvnKitDriver.class);\r
+\r
private final SVNClientManager manager;\r
\r
public SvnKitDriver() {\r
- DAVRepositoryFactory.setup();\r
- FSRepositoryFactory.setup();\r
+ DAVRepositoryFactory.setup();\r
+ FSRepositoryFactory.setup();\r
manager = SVNClientManager.newInstance();\r
}\r
\r
}\r
}\r
\r
- @SuppressWarnings("deprecation")\r
- public void checkout(String repositoryUrl, File destDir, Boolean recursive) {\r
+ public Boolean checkout(String repositoryUrl, File destDir,\r
+ Boolean recursive) {\r
try {\r
- manager.getUpdateClient().doCheckout(\r
+ SVNRevision previousRevision = null;\r
+ if (destDir.exists() && SVNWCUtil.isVersionedDirectory(destDir)) {\r
+ previousRevision = manager.getWCClient().doInfo(destDir, null)\r
+ .getRevision();\r
+ }\r
+ if (previousRevision == null && log.isDebugEnabled())\r
+ log.debug("Checking out " + repositoryUrl + " to " + destDir\r
+ + "...");\r
+ long revision = manager.getUpdateClient().doCheckout(\r
SVNURL.parseURIDecoded(repositoryUrl), destDir,\r
- SVNRevision.UNDEFINED, SVNRevision.HEAD, recursive);\r
+ SVNRevision.UNDEFINED, SVNRevision.HEAD, SVNDepth.INFINITY,\r
+ recursive);\r
+ if (previousRevision != null\r
+ && previousRevision.getNumber() == revision) {\r
+ if (log.isTraceEnabled())\r
+ log.trace(destDir + " already at revision " + revision);\r
+ return false;\r
+\r
+ } else {\r
+ if (log.isDebugEnabled())\r
+ if (previousRevision != null)\r
+ log.debug(destDir + " updated to revision " + revision\r
+ + " from " + previousRevision.getNumber());\r
+ else\r
+ log.debug(destDir + " checked out to revision "\r
+ + revision);\r
+ return true;\r
+ }\r
} catch (Exception e) {\r
throw new SlcException("Cannot checkout " + repositoryUrl + " to "\r
+ destDir, e);\r