Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java53
1 files changed, 35 insertions, 18 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java
index b086968c6c..0b0260a4cc 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java
@@ -120,7 +120,7 @@ public class RepositoryCache {
* repository to register.
*/
public static void register(final Repository db) {
- cache.registerRepository(FileKey.exact(db.getDirectory()), db);
+ cache.registerRepository(FileKey.exact(db.getDirectory(), db.getFS()), db);
}
/**
@@ -133,7 +133,7 @@ public class RepositoryCache {
* repository to unregister.
*/
public static void close(final Repository db) {
- cache.unregisterRepository(FileKey.exact(db.getDirectory()));
+ cache.unregisterRepository(FileKey.exact(db.getDirectory(), db.getFS()));
}
/** Unregister all repositories from the cache. */
@@ -248,11 +248,14 @@ public class RepositoryCache {
*
* @param directory
* location where the repository database is.
+ * @param fs
+ * the file system abstraction which will be necessary to
+ * perform certain file system operations.
* @return a key for the given directory.
- * @see #lenient(File)
+ * @see #lenient(File, FS)
*/
- public static FileKey exact(final File directory) {
- return new FileKey(directory);
+ public static FileKey exact(final File directory, FS fs) {
+ return new FileKey(directory, fs);
}
/**
@@ -268,22 +271,30 @@ public class RepositoryCache {
*
* @param directory
* location where the repository database might be.
+ * @param fs
+ * the file system abstraction which will be necessary to
+ * perform certain file system operations.
* @return a key for the given directory.
- * @see #exact(File)
+ * @see #exact(File, FS)
*/
- public static FileKey lenient(final File directory) {
- final File gitdir = resolve(directory);
- return new FileKey(gitdir != null ? gitdir : directory);
+ public static FileKey lenient(final File directory, FS fs) {
+ final File gitdir = resolve(directory, fs);
+ return new FileKey(gitdir != null ? gitdir : directory, fs);
}
private final File path;
+ private final FS fs;
/**
* @param directory
* exact location of the repository.
+ * @param fs
+ * the file system abstraction which will be necessary to
+ * perform certain file system operations.
*/
- protected FileKey(final File directory) {
+ protected FileKey(final File directory, FS fs) {
path = canonical(directory);
+ this.fs = fs;
}
private static File canonical(final File path) {
@@ -300,7 +311,7 @@ public class RepositoryCache {
}
public Repository open(final boolean mustExist) throws IOException {
- if (mustExist && !isGitRepository(path))
+ if (mustExist && !isGitRepository(path, fs))
throw new RepositoryNotFoundException(path);
return new Repository(path);
}
@@ -328,13 +339,16 @@ public class RepositoryCache {
*
* @param dir
* the location of the directory to examine.
+ * @param fs
+ * the file system abstraction which will be necessary to
+ * perform certain file system operations.
* @return true if the directory "looks like" a Git repository; false if
* it doesn't look enough like a Git directory to really be a
* Git directory.
*/
- public static boolean isGitRepository(final File dir) {
- return FS.resolve(dir, "objects").exists()
- && FS.resolve(dir, "refs").exists()
+ public static boolean isGitRepository(final File dir, FS fs) {
+ return fs.resolve(dir, "objects").exists()
+ && fs.resolve(dir, "refs").exists()
&& isValidHead(new File(dir, Constants.HEAD));
}
@@ -371,18 +385,21 @@ public class RepositoryCache {
*
* @param directory
* location to guess from. Several permutations are tried.
+ * @param fs
+ * the file system abstraction which will be necessary to
+ * perform certain file system operations.
* @return the actual directory location if a better match is found;
* null if there is no suitable match.
*/
- public static File resolve(final File directory) {
- if (isGitRepository(directory))
+ public static File resolve(final File directory, FS fs) {
+ if (isGitRepository(directory, fs))
return directory;
- if (isGitRepository(new File(directory, Constants.DOT_GIT)))
+ if (isGitRepository(new File(directory, Constants.DOT_GIT), fs))
return new File(directory, Constants.DOT_GIT);
final String name = directory.getName();
final File parent = directory.getParentFile();
- if (isGitRepository(new File(parent, name + Constants.DOT_GIT_EXT)))
+ if (isGitRepository(new File(parent, name + Constants.DOT_GIT_EXT), fs))
return new File(parent, name + Constants.DOT_GIT_EXT);
return null;
}

Back to the top