From ddaed96036ebf82430e09ad62ff9f7a7dc828dfe Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 23 Apr 2014 11:18:40 -0400
Subject: [PATCH] Fix subdirectory links in pages servlet (issue-411)

---
 releases.moxie                                      |    4 +++-
 src/main/java/com/gitblit/servlet/PagesServlet.java |   11 +++++++++--
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/releases.moxie b/releases.moxie
index 8e183f7..53fc3ea 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -9,7 +9,8 @@
     html: ~
     text: ~
     security: ~
-    fixes: ~
+    fixes:
+    - Fix subdirectory links in pages servlet (issue-411)
     changes:
     - improve French translation (pr-176)
     - simplify current plugin release detection and ignore the currentRelease registry field 
@@ -20,6 +21,7 @@
     - James Moger
     - Julien Kirch
     - Ralph Hoffman
+    - Olivier Rouits
 }
 
 #
diff --git a/src/main/java/com/gitblit/servlet/PagesServlet.java b/src/main/java/com/gitblit/servlet/PagesServlet.java
index 74c1cb2..5124b8c 100644
--- a/src/main/java/com/gitblit/servlet/PagesServlet.java
+++ b/src/main/java/com/gitblit/servlet/PagesServlet.java
@@ -28,6 +28,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.eclipse.jgit.lib.FileMode;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevTree;
@@ -228,11 +229,17 @@
 					response.getWriter().append("<thead><tr><th>path</th><th>mode</th><th>size</th></tr>");
 					response.getWriter().append("</thead>");
 					response.getWriter().append("<tbody>");
-					String pattern = "<tr><td><a href=\"{0}\">{0}</a></td><td>{1}</td><td>{2}</td></tr>";
+					String pattern = "<tr><td><a href=\"{0}\">{1}</a></td><td>{2}</td><td>{3}</td></tr>";
 					final ByteFormat byteFormat = new ByteFormat();
 					List<PathModel> entries = JGitUtils.getFilesInPath(r, resource, commit);
+					if (!entries.isEmpty()) {
+						if (entries.get(0).path.indexOf('/') > -1) {
+							// we are in a subdirectory, add parent directory link
+							entries.add(0, new PathModel("..", resource + "/..", 0, FileMode.TREE.getBits(), null, null));
+						}
+					}
 					for (PathModel entry : entries) {
-						response.getWriter().append(MessageFormat.format(pattern, entry.name, JGitUtils.getPermissionsFromMode(entry.mode), byteFormat.format(entry.size)));
+						response.getWriter().append(MessageFormat.format(pattern, entry.path, entry.name, JGitUtils.getPermissionsFromMode(entry.mode), byteFormat.format(entry.size)));
 					}
 					response.getWriter().append("</tbody>");
 					response.getWriter().append("</table>");

--
Gitblit v1.9.1