diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java index 031c324908..9a85fdf1f3 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java @@ -2,14 +2,11 @@ package sonia.scm.api.v2.resources; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.event.ScmEventBus; -import sonia.scm.repository.ClearRepositoryCacheEvent; import sonia.scm.repository.GitRepositoryConfig; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; import sonia.scm.store.ConfigurationStore; -import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.web.GitVndMediaType; import javax.inject.Inject; @@ -62,14 +59,9 @@ public class GitRepositoryConfigResource { GitRepositoryConfig config = repositoryConfigMapper.map(dto); repositoryConfigStore.set(config); LOG.info("git default branch of repository {} has changed, sending clear cache event", repository.getNamespaceAndName()); - sendClearRepositoryCacheEvent(repository); return Response.noContent().build(); } - private void sendClearRepositoryCacheEvent(Repository repository) { - ScmEventBus.getInstance().post(new ClearRepositoryCacheEvent(repository)); - } - private Repository getRepository(@PathParam("namespace") String namespace, @PathParam("name") String name) { NamespaceAndName namespaceAndName = new NamespaceAndName(namespace, name); Repository repository = repositoryManager.get(namespaceAndName); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigStoreProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigStoreProvider.java index 917892968f..d7ab5707d5 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigStoreProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigStoreProvider.java @@ -1,5 +1,7 @@ package sonia.scm.api.v2.resources; +import sonia.scm.event.ScmEventBus; +import sonia.scm.repository.ClearRepositoryCacheEvent; import sonia.scm.repository.GitRepositoryConfig; import sonia.scm.repository.Repository; import sonia.scm.store.ConfigurationStore; @@ -17,6 +19,32 @@ public class GitRepositoryConfigStoreProvider { } public ConfigurationStore get(Repository repository) { - return configurationStoreFactory.withType(GitRepositoryConfig.class).withName("gitConfig").forRepository(repository).build(); + return new StoreWrapper(configurationStoreFactory.withType(GitRepositoryConfig.class).withName("gitConfig").forRepository(repository).build(), repository); + } + + private static class StoreWrapper implements ConfigurationStore { + + private final ConfigurationStore delegate; + private final Repository repository; + + private StoreWrapper(ConfigurationStore delegate, Repository repository) { + this.delegate = delegate; + this.repository = repository; + } + + @Override + public GitRepositoryConfig get() { + return delegate.get(); + } + + @Override + public void set(GitRepositoryConfig object) { + delegate.set(object); + sendClearRepositoryCacheEvent(); + } + + private void sendClearRepositoryCacheEvent() { + ScmEventBus.getInstance().post(new ClearRepositoryCacheEvent(repository)); + } } }