diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java index ed502338cc..e1ea9dde09 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- @@ -76,6 +76,7 @@ public class SvnRepositoryHandler private static final Logger logger = LoggerFactory.getLogger(SvnRepositoryHandler.class); + private SvnRepositoryHook hook; @Inject public SvnRepositoryHandler(ConfigurationStoreFactory storeFactory, @@ -94,7 +95,8 @@ public class SvnRepositoryHandler // register hook if (eventFacade != null) { - FSHooks.registerHook(new SvnRepositoryHook(eventFacade, this)); + hook = new SvnRepositoryHook(eventFacade, this); + FSHooks.registerHook(hook); } else if (logger.isWarnEnabled()) { @@ -212,4 +214,12 @@ public class SvnRepositoryHandler String getRepositoryId(File directory) { return new SvnConfigHelper().getRepositoryId(directory); } + + @Override + public void close() throws IOException { + if (hook != null) { + FSHooks.unregisterHook(hook); + } + super.close(); + } } diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java index 9282fd2487..bd12979dc2 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; @@ -59,6 +59,8 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase { private HookEventFacade facade = new HookEventFacade(repositoryManagerProvider, hookContextFactory); + private SvnRepositoryHandler handler; + @Override protected void postSetUp() throws IOException, RepositoryPathNotFoundException { initMocks(this); @@ -82,7 +84,7 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase { protected RepositoryHandler createRepositoryHandler(ConfigurationStoreFactory factory, RepositoryLocationResolver locationResolver, File directory) { - SvnRepositoryHandler handler = new SvnRepositoryHandler(factory, null, locationResolver, null); + SvnRepositoryHandler handler = new SvnRepositoryHandler(factory, facade, locationResolver, null); handler.init(contextProvider); @@ -95,16 +97,20 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase { } @Test - public void getDirectory() { + public void getDirectory() throws IOException { when(factory.withType(any())).thenCallRealMethod(); SvnRepositoryHandler repositoryHandler = new SvnRepositoryHandler(factory, facade, locationResolver, null); - SvnConfig svnConfig = new SvnConfig(); - repositoryHandler.setConfig(svnConfig); + try { + SvnConfig svnConfig = new SvnConfig(); + repositoryHandler.setConfig(svnConfig); - initRepository(); - File path = repositoryHandler.getDirectory(repository.getId()); - assertEquals(repoPath.toString()+File.separator+ RepositoryDirectoryHandler.REPOSITORIES_NATIVE_DIRECTORY, path.getAbsolutePath()); + initRepository(); + File path = repositoryHandler.getDirectory(repository.getId()); + assertEquals(repoPath.toString() + File.separator + RepositoryDirectoryHandler.REPOSITORIES_NATIVE_DIRECTORY, path.getAbsolutePath()); + } finally { + repositoryHandler.close(); + } } }