Introduce repository config change event to clear caches

This commit is contained in:
René Pfeuffer
2018-12-13 09:22:10 +01:00
parent c3e6e28262
commit 24cd9c3f8c
4 changed files with 58 additions and 12 deletions

View File

@@ -0,0 +1,19 @@
package sonia.scm.api.v2.resources;
import com.github.legman.Subscribe;
import sonia.scm.EagerSingleton;
import sonia.scm.event.ScmEventBus;
import sonia.scm.plugin.Extension;
import sonia.scm.repository.ClearRepositoryCacheEvent;
import java.util.Objects;
@EagerSingleton @Extension
public class GitRepositoryConfigChangeClearRepositoryCacheListener {
@Subscribe
public void sendClearRepositoryCacheEvent(GitRepositoryConfigChangedEvent event) {
if (!Objects.equals(event.getOldConfig().getDefaultBranch(), event.getNewConfig().getDefaultBranch())) {
ScmEventBus.getInstance().post(new ClearRepositoryCacheEvent(event.getRepository()));
}
}
}

View File

@@ -0,0 +1,30 @@
package sonia.scm.api.v2.resources;
import sonia.scm.event.Event;
import sonia.scm.repository.GitRepositoryConfig;
import sonia.scm.repository.Repository;
@Event
public class GitRepositoryConfigChangedEvent {
private final Repository repository;
private final GitRepositoryConfig oldConfig;
private final GitRepositoryConfig newConfig;
public GitRepositoryConfigChangedEvent(Repository repository, GitRepositoryConfig oldConfig, GitRepositoryConfig newConfig) {
this.repository = repository;
this.oldConfig = oldConfig;
this.newConfig = newConfig;
}
public Repository getRepository() {
return repository;
}
public GitRepositoryConfig getOldConfig() {
return oldConfig;
}
public GitRepositoryConfig getNewConfig() {
return newConfig;
}
}

View File

@@ -43,9 +43,6 @@ public class GitRepositoryConfigResource {
Repository repository = getRepository(namespace, name);
ConfigurationStore<GitRepositoryConfig> repositoryConfigStore = getStore(repository);
GitRepositoryConfig config = repositoryConfigStore.get();
if (config == null) {
config = new GitRepositoryConfig();
}
GitRepositoryConfigDto dto = repositoryConfigMapper.map(config, repository);
return Response.ok(dto).build();
}

View File

@@ -1,7 +1,6 @@
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;
@@ -34,17 +33,18 @@ public class GitRepositoryConfigStoreProvider {
@Override
public GitRepositoryConfig get() {
return delegate.get();
GitRepositoryConfig config = delegate.get();
if (config == null) {
return new GitRepositoryConfig();
}
return config;
}
@Override
public void set(GitRepositoryConfig object) {
delegate.set(object);
sendClearRepositoryCacheEvent();
}
private void sendClearRepositoryCacheEvent() {
ScmEventBus.getInstance().post(new ClearRepositoryCacheEvent(repository));
public void set(GitRepositoryConfig newConfig) {
GitRepositoryConfig oldConfig = get();
delegate.set(newConfig);
ScmEventBus.getInstance().post(new GitRepositoryConfigChangedEvent(repository, oldConfig, newConfig));
}
}
}