From: Sebastian Schuberth Date: Tue, 19 May 2015 08:49:44 +0000 (+0200) Subject: FS: Add a method to discover the system-wide config file X-Git-Tag: v4.0.0.201505260635-rc2~1^2~13 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=cb12f4f0ad71a688859980b7bc11d277b80fd591;p=jgit.git FS: Add a method to discover the system-wide config file Change-Id: I969e26a5ab5f8ca3ab29024f405c1e34afdba493 Signed-off-by: Sebastian Schuberth Signed-off-by: Matthias Sohn --- diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java index 4a85e560e8..f61606e48e 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java @@ -53,10 +53,12 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintStream; import java.io.PrintWriter; +import java.nio.charset.Charset; import java.security.AccessController; import java.security.PrivilegedAction; import java.text.MessageFormat; import java.util.Arrays; +import java.util.HashMap; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; @@ -536,6 +538,31 @@ public abstract class FS { */ protected abstract File discoverGitExe(); + /** + * @return the path to the system-wide Git configuration file. + * @since 4.0 + */ + protected File discoverGitSystemConfig() { + File gitExe = discoverGitExe(); + if (gitExe == null) { + return null; + } + + // Trick Git into printing the path to the config file by using "echo" + // as the editor. + Map env = new HashMap<>(); + env.put("GIT_EDITOR", "echo"); //$NON-NLS-1$ //$NON-NLS-2$ + + String w = readPipe(gitExe.getParentFile(), + new String[] { "git", "config", "--system", "--edit" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + Charset.defaultCharset().name(), env); + if (StringUtils.isEmptyOrNull(w)) { + return null; + } + + return new File(w); + } + /** @return the $prefix directory C Git would use. */ protected File discoverGitPrefix() { return resolveGrandparentFile(discoverGitExe());