|
|
@@ -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<String, String> 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()); |