pgm daemon: fallback to user and system config if no config specified

If a config file is passed via option --config-file then use only the
options defined in that file. This helps to concisely configure the
daemon without side effects from global and system level git configs.

Otherwise fallback to user and system level configs.

Change-Id: I242de248f257579874ad0bfe4882a22502353b1f
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
Matthias Sohn 2020-01-27 23:00:57 +01:00
parent 709f83d489
commit 187b7ad72e
1 changed files with 22 additions and 7 deletions

View File

@ -44,6 +44,7 @@
package org.eclipse.jgit.pgm;
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.URISyntaxException;
import java.text.MessageFormat;
@ -51,12 +52,14 @@
import java.util.List;
import java.util.concurrent.Executors;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.internal.ketch.KetchLeader;
import org.eclipse.jgit.internal.ketch.KetchLeaderCache;
import org.eclipse.jgit.internal.ketch.KetchPreReceive;
import org.eclipse.jgit.internal.ketch.KetchSystem;
import org.eclipse.jgit.internal.ketch.KetchText;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.pgm.internal.CLIText;
import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.eclipse.jgit.storage.file.WindowCacheConfig;
@ -69,6 +72,7 @@
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import org.eclipse.jgit.util.FS;
import org.eclipse.jgit.util.SystemReader;
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.Option;
@ -121,19 +125,20 @@ protected boolean requiresRepository() {
@Override
protected void run() throws Exception {
PackConfig packConfig = new PackConfig();
if (configFile != null) {
StoredConfig cfg;
if (configFile == null) {
cfg = getUserConfig();
} else {
if (!configFile.exists()) {
throw die(MessageFormat.format(
CLIText.get().configFileNotFound, //
configFile.getAbsolutePath()));
}
FileBasedConfig cfg = new FileBasedConfig(configFile, FS.DETECTED);
cfg.load();
new WindowCacheConfig().fromConfig(cfg).install();
packConfig.fromConfig(cfg);
cfg = new FileBasedConfig(configFile, FS.DETECTED);
}
cfg.load();
new WindowCacheConfig().fromConfig(cfg).install();
packConfig.fromConfig(cfg);
int threads = packConfig.getThreads();
if (threads <= 0)
@ -173,6 +178,16 @@ protected void run() throws Exception {
outw.println(MessageFormat.format(CLIText.get().listeningOn, d.getAddress()));
}
private StoredConfig getUserConfig() throws IOException {
StoredConfig userConfig = null;
try {
userConfig = SystemReader.getInstance().getUserConfig();
} catch (ConfigInvalidException e) {
throw die(e.getMessage());
}
return userConfig;
}
private static DaemonService service(
final org.eclipse.jgit.transport.Daemon d,
final String n) {