From 6f066dec02052876493b4ca9f20b7bfa941b14ce Mon Sep 17 00:00:00 2001 From: Marc Strapetz Date: Thu, 10 Mar 2011 13:17:57 +0100 Subject: [PATCH] Cache gitPrefix in FS_Win32 readPipe() may consume rather much time, so gitPrefix should be cached. If the git executable changes, users should run FS.detect() again to get a new instance of FS_Win32. --- .../src/org/eclipse/jgit/util/FS_Win32.java | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) 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