summaryrefslogtreecommitdiffstats
path: root/src/com/gitblit/utils
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2012-03-28 17:57:35 -0400
committerJames Moger <james.moger@gitblit.com>2012-03-28 17:57:35 -0400
commit1aa6e081ffe319ff3ddfa246783cb65dc1c71b3b (patch)
tree15642ada937c47daf052a750807d7566c3216d70 /src/com/gitblit/utils
parent6fdbc6b5bdb805d1faefe3f26105d5adfa37d5a1 (diff)
downloadgitblit-1aa6e081ffe319ff3ddfa246783cb65dc1c71b3b.tar.gz
gitblit-1aa6e081ffe319ff3ddfa246783cb65dc1c71b3b.zip
Fixed symlink absolute path/canonical path mixup with JGit (issue 78)
Diffstat (limited to 'src/com/gitblit/utils')
-rw-r--r--src/com/gitblit/utils/FileUtils.java29
-rw-r--r--src/com/gitblit/utils/JGitUtils.java4
2 files changed, 31 insertions, 2 deletions
diff --git a/src/com/gitblit/utils/FileUtils.java b/src/com/gitblit/utils/FileUtils.java
index 29c9d0fe..f8d35c84 100644
--- a/src/com/gitblit/utils/FileUtils.java
+++ b/src/com/gitblit/utils/FileUtils.java
@@ -149,4 +149,33 @@ public class FileUtils {
}
}
}
+
+ /**
+ * Determine the relative path between two files. Takes into account
+ * canonical paths, if possible.
+ *
+ * @param basePath
+ * @param path
+ * @return a relative path from basePath to path
+ */
+ public static String getRelativePath(File basePath, File path) {
+ File exactBase = getExactFile(basePath);
+ File exactPath = getExactFile(path);
+ return StringUtils.getRelativePath(exactBase.getPath(), exactPath.getPath());
+ }
+
+ /**
+ * Returns the exact path for a file. This path will be the canonical path
+ * unless an exception is thrown in which case it will be the absolute path.
+ *
+ * @param path
+ * @return the exact file
+ */
+ public static File getExactFile(File path) {
+ try {
+ return path.getCanonicalFile();
+ } catch (IOException e) {
+ return path.getAbsoluteFile();
+ }
+ }
}
diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java
index f495a38f..72e948cc 100644
--- a/src/com/gitblit/utils/JGitUtils.java
+++ b/src/com/gitblit/utils/JGitUtils.java
@@ -301,6 +301,7 @@ public class JGitUtils {
*/
private static List<String> getRepositoryList(String basePath, File searchFolder,
boolean onlyBare, boolean searchSubfolders) {
+ File baseFile = new File(basePath);
List<String> list = new ArrayList<String>();
for (File file : searchFolder.listFiles()) {
if (file.isDirectory()) {
@@ -310,8 +311,7 @@ public class JGitUtils {
continue;
}
// determine repository name relative to base path
- String repository = StringUtils.getRelativePath(basePath,
- file.getAbsolutePath());
+ String repository = FileUtils.getRelativePath(baseFile, file);
list.add(repository);
} else if (searchSubfolders && file.canRead()) {
// look for repositories in subfolders