Browse Source

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.
stable-0.12
Marc Strapetz 14 years ago
parent
commit
6f066dec02
  1. 16
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java

16
org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java

@ -64,6 +64,9 @@ class FS_Win32 extends FS {
&& StringUtils.toLowerCase(osDotName).indexOf("windows") != -1; && StringUtils.toLowerCase(osDotName).indexOf("windows") != -1;
} }
private File gitPrefix;
private boolean gitPrefixEvaluated;
public boolean supportsExecute() { public boolean supportsExecute() {
return false; return false;
} }
@ -83,11 +86,14 @@ class FS_Win32 extends FS {
@Override @Override
public File gitPrefix() { public File gitPrefix() {
if (gitPrefixEvaluated)
return gitPrefix;
String path = SystemReader.getInstance().getenv("PATH"); String path = SystemReader.getInstance().getenv("PATH");
File gitExe = searchPath(path, "git.exe", "git.cmd"); File gitExe = searchPath(path, "git.exe", "git.cmd");
if (gitExe != null) 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 // This isn't likely to work, if bash is in $PATH, git should
// also be in $PATH. But its worth trying. // also be in $PATH. But its worth trying.
// //
@ -95,9 +101,11 @@ class FS_Win32 extends FS {
new String[] { "bash", "--login", "-c", "which git" }, // new String[] { "bash", "--login", "-c", "which git" }, //
Charset.defaultCharset().name()); Charset.defaultCharset().name());
if (w != null) if (w != null)
return new File(w).getParentFile().getParentFile(); gitPrefix = new File(w).getParentFile().getParentFile();
}
return null; gitPrefixEvaluated = true;
return gitPrefix;
} }
@Override @Override

Loading…
Cancel
Save