mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-06 21:45:43 +01:00
Introduce repository config change event to clear caches
This commit is contained in:
@@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user