mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 00:15:44 +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);
|
Repository repository = getRepository(namespace, name);
|
||||||
ConfigurationStore<GitRepositoryConfig> repositoryConfigStore = getStore(repository);
|
ConfigurationStore<GitRepositoryConfig> repositoryConfigStore = getStore(repository);
|
||||||
GitRepositoryConfig config = repositoryConfigStore.get();
|
GitRepositoryConfig config = repositoryConfigStore.get();
|
||||||
if (config == null) {
|
|
||||||
config = new GitRepositoryConfig();
|
|
||||||
}
|
|
||||||
GitRepositoryConfigDto dto = repositoryConfigMapper.map(config, repository);
|
GitRepositoryConfigDto dto = repositoryConfigMapper.map(config, repository);
|
||||||
return Response.ok(dto).build();
|
return Response.ok(dto).build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package sonia.scm.api.v2.resources;
|
package sonia.scm.api.v2.resources;
|
||||||
|
|
||||||
import sonia.scm.event.ScmEventBus;
|
import sonia.scm.event.ScmEventBus;
|
||||||
import sonia.scm.repository.ClearRepositoryCacheEvent;
|
|
||||||
import sonia.scm.repository.GitRepositoryConfig;
|
import sonia.scm.repository.GitRepositoryConfig;
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.Repository;
|
||||||
import sonia.scm.store.ConfigurationStore;
|
import sonia.scm.store.ConfigurationStore;
|
||||||
@@ -34,17 +33,18 @@ public class GitRepositoryConfigStoreProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GitRepositoryConfig get() {
|
public GitRepositoryConfig get() {
|
||||||
return delegate.get();
|
GitRepositoryConfig config = delegate.get();
|
||||||
|
if (config == null) {
|
||||||
|
return new GitRepositoryConfig();
|
||||||
|
}
|
||||||
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void set(GitRepositoryConfig object) {
|
public void set(GitRepositoryConfig newConfig) {
|
||||||
delegate.set(object);
|
GitRepositoryConfig oldConfig = get();
|
||||||
sendClearRepositoryCacheEvent();
|
delegate.set(newConfig);
|
||||||
}
|
ScmEventBus.getInstance().post(new GitRepositoryConfigChangedEvent(repository, oldConfig, newConfig));
|
||||||
|
|
||||||
private void sendClearRepositoryCacheEvent() {
|
|
||||||
ScmEventBus.getInstance().post(new ClearRepositoryCacheEvent(repository));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user