From b8fe0ce27010ebb943a70be475c864cc862ac5b1 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 30 Dec 2011 11:29:45 +0100 Subject: [PATCH] fix svn hooks for repositories located on soft links --- .../scm/repository/SvnRepositoryHook.java | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHook.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHook.java index e8b9e63e4a..d1d94b78ee 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHook.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHook.java @@ -46,12 +46,14 @@ import org.tmatesoft.svn.core.internal.io.fs.FSHook; import org.tmatesoft.svn.core.internal.io.fs.FSHookEvent; import org.tmatesoft.svn.core.internal.io.fs.FSHooks; +import sonia.scm.util.AssertUtil; import sonia.scm.util.IOUtil; import sonia.scm.util.Util; //~--- JDK imports ------------------------------------------------------------ import java.io.File; +import java.io.IOException; /** * @@ -155,10 +157,7 @@ public class SvnRepositoryHook implements FSHook { try { - String name = - directory.getAbsolutePath() - .substring(handler.getConfig().getRepositoryDirectory() - .getAbsolutePath().length()); + String name = getRepositoryName(directory); name = IOUtil.trimSeperatorChars(name); repositoryManager.fireHookEvent(SvnRepositoryHandler.TYPE_NAME, name, @@ -176,6 +175,39 @@ public class SvnRepositoryHook implements FSHook } } + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param directory + * + * @return + * + * @throws IOException + */ + private String getRepositoryName(File directory) throws IOException + { + AssertUtil.assertIsNotNull(directory); + + String name = null; + String path = directory.getCanonicalPath(); + int directoryLength = + handler.getConfig().getRepositoryDirectory().getCanonicalPath().length(); + + if (directoryLength < path.length()) + { + name = IOUtil.trimSeperatorChars(path.substring(directoryLength)); + } + else if (logger.isWarnEnabled()) + { + logger.warn("path is shorter as the main hg repository path"); + } + + return name; + } + //~--- fields --------------------------------------------------------------- /** Field description */