Browse Source

Merge "FS: Allow gitPrefix to be set and cached"

stable-0.12
Chris Aniszczyk 14 years ago committed by Code Review
parent
commit
aa5f9ecdf2
  1. 34
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
  2. 2
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java
  3. 31
      org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java

34
org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java

@ -101,6 +101,8 @@ public abstract class FS {
private final File userHome;
private volatile Holder<File> gitPrefix;
/**
* Constructs a file system abstraction.
*/
@ -258,7 +260,29 @@ public abstract class FS {
}
/** @return the $prefix directory C Git would use. */
public abstract File gitPrefix();
public File gitPrefix() {
Holder<File> p = gitPrefix;
if (p == null) {
p = new Holder<File>(discoverGitPrefix());
gitPrefix = p;
}
return p.value;
}
/** @return the $prefix directory C Git would use. */
protected abstract File discoverGitPrefix();
/**
* Set the $prefix directory C Git uses.
*
* @param path
* the directory. Null if C Git is not installed.
* @return {@code this}
*/
public FS setGitPrefix(File path) {
gitPrefix = new Holder<File>(path);
return this;
}
/**
* Initialize a ProcesssBuilder to run a command using the system shell.
@ -273,4 +297,12 @@ public abstract class FS {
* populating directory, environment, and then start the process.
*/
public abstract ProcessBuilder runInShell(String cmd, String[] args);
private static class Holder<V> {
final V value;
Holder(V value) {
this.value = value;
}
}
}

2
org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java

@ -52,7 +52,7 @@ import java.util.List;
abstract class FS_POSIX extends FS {
@Override
public File gitPrefix() {
protected File discoverGitPrefix() {
String path = SystemReader.getInstance().getenv("PATH");
File gitExe = searchPath(path, "git");
if (gitExe != null)

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

@ -64,9 +64,6 @@ class FS_Win32 extends FS {
&& StringUtils.toLowerCase(osDotName).indexOf("windows") != -1;
}
private File gitPrefix;
private boolean gitPrefixEvaluated;
public boolean supportsExecute() {
return false;
}
@ -85,27 +82,21 @@ class FS_Win32 extends FS {
}
@Override
public File gitPrefix() {
if (gitPrefixEvaluated)
return gitPrefix;
protected File discoverGitPrefix() {
String path = SystemReader.getInstance().getenv("PATH");
File gitExe = searchPath(path, "git.exe", "git.cmd");
if (gitExe != null)
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();
}
return gitExe.getParentFile().getParentFile();
gitPrefixEvaluated = true;
return gitPrefix;
// 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;
}
@Override

Loading…
Cancel
Save