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 51b5a45ac..a7c088921 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 static FS detect(Boolean cygwinUsed) { return new FS_POSIX_Java5(); } - private final File userHome; + private volatile Holder userHome; private volatile Holder gitPrefix; @@ -107,7 +107,7 @@ public static FS detect(Boolean cygwinUsed) { * Constructs a file system abstraction. */ protected FS() { - this.userHome = userHomeImpl(); + // Do nothing by default. } /** @@ -182,7 +182,25 @@ public File resolve(final File dir, final String name) { * @return the user's home directory; null if the user does not have one. */ public File userHome() { - return userHome; + Holder p = userHome; + if (p == null) { + p = new Holder(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(path); + return this; } /**