]> source.dussan.org Git - jgit.git/commitdiff
pgm daemon: fallback to user and system config if no config specified 83/156683/2
authorMatthias Sohn <matthias.sohn@sap.com>
Mon, 27 Jan 2020 22:00:57 +0000 (23:00 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Tue, 28 Jan 2020 10:24:04 +0000 (11:24 +0100)
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>
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Daemon.java

index 319b5e39dc53b151e8a9d006d8adc41d5aace3ce..f989d2e8bc327166795ed6484840cda9eb4b9d16 100644 (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.ArrayList;
 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.ReceivePackFactory;
 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 @@ class Daemon extends TextBuiltin {
        @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 @@ class Daemon extends TextBuiltin {
                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) {