Use a simpler named binding for the LocalDiskRepositoryManager
This partly reverts commit 0db559343d648180cb25d340c72f1e479165fb0c
and introduces a simpler named binding using the simple class name
of the LocalDiskRepositoryManager.
Allows to have a zero-configuration chaining between different
repository managers, using the optional binding technique.
Also, does not require anymore changes in other dependent plugins
such as multi-site and high-availability, because the absence of a
named binding is already managed with a fallback to the previous
legacy binding to the LocalDiskRepositoryManager class.
Bump the global-refdb version to 3.4.4.4.
Change-Id: I95ca0c2f9281384d29494c4594699a1c1add29ca
diff --git a/pom.xml b/pom.xml
index 55f29fd..22ea4e5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
<groupId>com.gerritforge</groupId>
<artifactId>global-refdb</artifactId>
- <version>3.4.4.3</version>
+ <version>3.4.4.4</version>
<packaging>jar</packaging>
<name>global-refdb</name>
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
index 0cb78b6..a607cdc 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
@@ -23,8 +23,6 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
-import com.google.gerrit.server.git.GitRepositoryManager;
-import com.google.gerrit.server.git.LocalDiskRepositoryManager;
import java.io.IOException;
import java.util.List;
import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -43,7 +41,6 @@
private final Supplier<Projects> projects;
private final Supplier<SharedRefDatabase> sharedRefDb;
private final String pluginName;
- private final String localDiskRepositoryManagerClassName;
/**
* Constructs a {@code SharedRefDbConfiguration} by providing the libModule name and a 'config'
@@ -57,13 +54,6 @@
projects = memoize(() -> new Projects(lazyCfg));
sharedRefDb = memoize(() -> new SharedRefDatabase(lazyCfg));
this.pluginName = pluginName;
- localDiskRepositoryManagerClassName =
- lazyCfg
- .get()
- .getString(
- SharedRefDatabase.SECTION,
- null,
- SharedRefDatabase.LOCAL_DISK_REPOSITORY_MANAGER_CLASS);
}
/**
@@ -102,15 +92,6 @@
return ofInstance(config);
}
- public Class<? extends GitRepositoryManager> getLocalRepositoryManager()
- throws ClassNotFoundException {
- if (localDiskRepositoryManagerClassName != null) {
- return (Class<? extends GitRepositoryManager>)
- Class.forName(localDiskRepositoryManagerClassName);
- }
- return LocalDiskRepositoryManager.class;
- }
-
/**
* Represents the global refdb configuration, which is computed by reading the 'ref-database'
* section from the configuration file of this library's consumers. It allows to specify whether
@@ -121,8 +102,6 @@
public static final String SECTION = "ref-database";
public static final String ENABLE_KEY = "enabled";
public static final String SUBSECTION_ENFORCEMENT_RULES = "enforcementRules";
- public static final String LOCAL_DISK_REPOSITORY_MANAGER_CLASS =
- "localDiskRepositoryManagerClass";
private final boolean enabled;
private final Multimap<EnforcePolicy, String> enforcementRules;
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
index da277e2..0e21338 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
@@ -14,9 +14,11 @@
package com.gerritforge.gerrit.globalrefdb.validation;
+import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import com.google.gerrit.entities.Project;
import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.git.LocalDiskRepositoryManager;
import com.google.gerrit.server.git.RepositoryCaseMismatchException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -48,9 +50,11 @@
*/
public static final String IGNORED_REFS = "ignored_refs";
- public static final String LOCAL_DISK_REPOSITORY_MANAGER = "local_disk_repository_manager";
+ @Inject(optional = true)
+ @Named("LocalDiskRepositoryManager")
+ private GitRepositoryManager gitRepositoryManager;
- private final GitRepositoryManager gitRepositoryManager;
+ private final LocalDiskRepositoryManager localDiskRepositoryManager;
private final SharedRefDbRepository.Factory sharedRefDbRepoFactory;
@Inject(optional = true)
@@ -69,9 +73,9 @@
@Inject
public SharedRefDbGitRepositoryManager(
SharedRefDbRepository.Factory sharedRefDbRepoFactory,
- @Named(LOCAL_DISK_REPOSITORY_MANAGER) GitRepositoryManager localDiskRepositoryManager) {
+ LocalDiskRepositoryManager localDiskRepositoryManager) {
this.sharedRefDbRepoFactory = sharedRefDbRepoFactory;
- this.gitRepositoryManager = localDiskRepositoryManager;
+ this.localDiskRepositoryManager = localDiskRepositoryManager;
}
/**
@@ -85,7 +89,7 @@
@Override
public Repository openRepository(Project.NameKey name)
throws RepositoryNotFoundException, IOException {
- return wrap(name, gitRepositoryManager.openRepository(name));
+ return wrap(name, repositoryManager().openRepository(name));
}
/**
@@ -101,15 +105,19 @@
@Override
public Repository createRepository(Project.NameKey name)
throws RepositoryCaseMismatchException, RepositoryNotFoundException, IOException {
- return wrap(name, gitRepositoryManager.createRepository(name));
+ return wrap(name, repositoryManager().createRepository(name));
}
@Override
public SortedSet<Project.NameKey> list() {
- return gitRepositoryManager.list();
+ return repositoryManager().list();
}
private Repository wrap(Project.NameKey projectName, Repository projectRepo) {
return sharedRefDbRepoFactory.create(projectName.get(), projectRepo, ignoredRefs);
}
+
+ private GitRepositoryManager repositoryManager() {
+ return MoreObjects.firstNonNull(gitRepositoryManager, localDiskRepositoryManager);
+ }
}
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
index 34f39c8..a6c7667 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
@@ -19,7 +19,6 @@
import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
import com.google.common.collect.ImmutableSet;
-import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.LocalDiskRepositoryManager;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
@@ -121,10 +120,7 @@
.annotatedWith(Names.named(SharedRefDbGitRepositoryManager.IGNORED_REFS))
.toInstance(ignoredRefs);
bind(SharedRefDbRepository.Factory.class).toInstance(sharedRefDbRepositoryFactoryMock);
- bind(GitRepositoryManager.class)
- .annotatedWith(
- Names.named(SharedRefDbGitRepositoryManager.LOCAL_DISK_REPOSITORY_MANAGER))
- .toInstance(localDiskRepositoryManagerMock);
+ bind(LocalDiskRepositoryManager.class).toInstance(localDiskRepositoryManagerMock);
}
});
}
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java
index eb84739..b1af798 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java
@@ -23,8 +23,6 @@
import com.google.gerrit.acceptance.TestPlugin;
import com.google.gerrit.extensions.config.FactoryModule;
import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.git.GitRepositoryManager;
-import com.google.gerrit.server.git.LocalDiskRepositoryManager;
import com.google.inject.*;
import com.google.inject.name.Names;
import java.util.Optional;
@@ -107,9 +105,6 @@
bind(SharedRefDbConfiguration.class).toInstance(cfg);
bind(ValidationMetrics.class);
- bind(GitRepositoryManager.class)
- .annotatedWith(Names.named(SharedRefDbGitRepositoryManager.LOCAL_DISK_REPOSITORY_MANAGER))
- .to(LocalDiskRepositoryManager.class);
bind(SharedRefDbGitRepositoryManager.class);
bind(SharedRefEnforcement.class).to(DefaultSharedRefEnforcement.class).in(Scopes.SINGLETON);
}