aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java24
1 files changed, 21 insertions, 3 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
index 51b5a45ac2..a7c0889219 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
@@ -99,7 +99,7 @@ public abstract class FS {
return new FS_POSIX_Java5();
}
- private final File userHome;
+ private volatile Holder<File> userHome;
private volatile Holder<File> gitPrefix;
@@ -107,7 +107,7 @@ public abstract class FS {
* Constructs a file system abstraction.
*/
protected FS() {
- this.userHome = userHomeImpl();
+ // Do nothing by default.
}
/**
@@ -182,7 +182,25 @@ public abstract class FS {
* @return the user's home directory; null if the user does not have one.
*/
public File userHome() {
- return userHome;
+ Holder<File> p = userHome;
+ if (p == null) {
+ p = new Holder<File>(userHomeImpl());
+ userHome = p;
+ }
+ return p.value;
+ }
+
+ /**
+ * Set the user's home directory location.
+ *
+ * @param path
+ * the location of the user's preferences; null if there is no
+ * home directory for the current user.
+ * @return {@code this}.
+ */
+ public FS setUserHome(File path) {
+ userHome = new Holder<File>(path);
+ return this;
}
/**