diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java index 0e05de091..bde633c58 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java @@ -64,6 +64,9 @@ public String run() { && StringUtils.toLowerCase(osDotName).indexOf("windows") != -1; } + private File gitPrefix; + private boolean gitPrefixEvaluated; + public boolean supportsExecute() { return false; } @@ -83,21 +86,26 @@ public boolean retryFailedLockFileCommit() { @Override public File gitPrefix() { + if (gitPrefixEvaluated) + return gitPrefix; + String path = SystemReader.getInstance().getenv("PATH"); File gitExe = searchPath(path, "git.exe", "git.cmd"); if (gitExe != null) - return gitExe.getParentFile().getParentFile(); + gitPrefix = gitExe.getParentFile().getParentFile(); + else { + // This isn't likely to work, if bash is in $PATH, git should + // also be in $PATH. But its worth trying. + // + String w = readPipe(userHome(), // + new String[] { "bash", "--login", "-c", "which git" }, // + Charset.defaultCharset().name()); + if (w != null) + gitPrefix = new File(w).getParentFile().getParentFile(); + } - // This isn't likely to work, if bash is in $PATH, git should - // also be in $PATH. But its worth trying. - // - String w = readPipe(userHome(), // - new String[] { "bash", "--login", "-c", "which git" }, // - Charset.defaultCharset().name()); - if (w != null) - return new File(w).getParentFile().getParentFile(); - - return null; + gitPrefixEvaluated = true; + return gitPrefix; } @Override