From a74ddc24545ec45d0bb82ca2bb8f628ffdaa9da3 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 10 Oct 2014 12:04:39 -0400
Subject: [PATCH] Improve relative path determination using Java 7 Paths

---
 src/main/java/com/gitblit/utils/FileUtils.java |   20 ++++++--------------
 1 files changed, 6 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/gitblit/utils/FileUtils.java b/src/main/java/com/gitblit/utils/FileUtils.java
index a1eb5bb..27caa7e 100644
--- a/src/main/java/com/gitblit/utils/FileUtils.java
+++ b/src/main/java/com/gitblit/utils/FileUtils.java
@@ -26,6 +26,8 @@
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.nio.charset.Charset;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 
 /**
  * Common file utilities.
@@ -291,20 +293,10 @@
 	 * @return a relative path from basePath to path
 	 */
 	public static String getRelativePath(File basePath, File path) {
-		File exactBase = getExactFile(basePath);
-		File exactPath = getExactFile(path);
-		if (path.getAbsolutePath().startsWith(basePath.getAbsolutePath())) {
-			// absolute base-path match
-			return StringUtils.getRelativePath(basePath.getAbsolutePath(), path.getAbsolutePath());
-		} else if (exactPath.getPath().startsWith(exactBase.getPath())) {
-			// canonical base-path match
-			return StringUtils.getRelativePath(exactBase.getPath(), exactPath.getPath());
-		} else if (exactPath.getPath().startsWith(basePath.getAbsolutePath())) {
-			// mixed path match
-			return StringUtils.getRelativePath(basePath.getAbsolutePath(), exactPath.getPath());
-		} else if (path.getAbsolutePath().startsWith(exactBase.getPath())) {
-			// mixed path match
-			return StringUtils.getRelativePath(exactBase.getPath(), path.getAbsolutePath());
+		Path exactBase = Paths.get(getExactFile(basePath).toURI());
+		Path exactPath = Paths.get(getExactFile(path).toURI());
+		if (exactPath.startsWith(exactBase)) {
+			return exactBase.relativize(exactPath).toString();
 		}
 		// no relative relationship
 		return null;

--
Gitblit v1.9.1