Unregister svn hook when handler is closed

This commit is contained in:
René Pfeuffer
2020-06-22 13:56:57 +02:00
parent 2706447238
commit 5dda141064
2 changed files with 26 additions and 10 deletions

View File

@@ -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();
}
}

View File

@@ -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();
}
}
}