From ff17f7bac432b4ba8310ba3ea335748a34859d50 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 05 May 2014 09:53:24 -0400
Subject: [PATCH] Replace RawPage with RawServlet

---
 src/main/java/com/gitblit/wicket/pages/TreePage.java       |    6 +
 src/main/java/com/gitblit/wicket/panels/TagsPanel.java     |   11 ++-
 src/main/java/WEB-INF/web.xml                              |   30 +++++-----
 src/main/java/com/gitblit/Constants.java                   |    2 
 src/main/java/com/gitblit/servlet/PagesFilter.java         |    2 
 src/main/java/com/gitblit/wicket/GitBlitWebApp.java        |    4 -
 src/main/java/com/gitblit/servlet/PagesServlet.java        |    2 
 src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java |    5 +
 src/main/java/com/gitblit/wicket/pages/BasePage.java       |    4 +
 src/main/java/com/gitblit/wicket/pages/DocsPage.java       |    9 +-
 src/main/java/com/gitblit/wicket/pages/BlobPage.java       |   12 ++-
 src/main/java/com/gitblit/wicket/pages/DocPage.java        |    6 +
 src/main/java/com/gitblit/servlet/RawServlet.java          |   24 ++-----
 src/main/java/com/gitblit/wicket/pages/CommitPage.java     |    5 +
 src/main/java/com/gitblit/servlet/RawFilter.java           |    4 
 src/main/java/com/gitblit/wicket/MarkupProcessor.java      |   11 ++-
 src/main/java/com/gitblit/wicket/pages/ComparePage.java    |    5 +
 17 files changed, 76 insertions(+), 66 deletions(-)

diff --git a/src/main/java/WEB-INF/web.xml b/src/main/java/WEB-INF/web.xml
index d60992d..cb483af 100644
--- a/src/main/java/WEB-INF/web.xml
+++ b/src/main/java/WEB-INF/web.xml
@@ -134,18 +134,18 @@
 	</servlet-mapping>	
 
 
-	<!-- Branch Servlet
+	<!-- Raw Servlet
 		 <url-pattern> MUST match: 
-			* BranchFilter
-			* com.gitblit.Constants.BRANCH_PATH
+			* RawFilter
+			* com.gitblit.Constants.RAW_PATH
 			* Wicket Filter ignorePaths parameter -->
 	<servlet>
-		<servlet-name>BranchServlet</servlet-name>
-		<servlet-class>com.gitblit.servlet.BranchServlet</servlet-class>
+		<servlet-name>RawServlet</servlet-name>
+		<servlet-class>com.gitblit.servlet.RawServlet</servlet-class>
 	</servlet>
 	<servlet-mapping>
-		<servlet-name>BranchServlet</servlet-name>		
-		<url-pattern>/branch/*</url-pattern>
+		<servlet-name>RawServlet</servlet-name>		
+		<url-pattern>/raw/*</url-pattern>
 	</servlet-mapping>	
 
 
@@ -280,16 +280,16 @@
 
 	<!-- Branch Restriction Filter
 		 <url-pattern> MUST match: 
-			* BranchServlet
+			* RawServlet
 			* com.gitblit.Constants.BRANCH_PATH
 			* Wicket Filter ignorePaths parameter -->
 	<filter>
-		<filter-name>BranchFilter</filter-name>
-		<filter-class>com.gitblit.servlet.BranchFilter</filter-class>
+		<filter-name>RawFilter</filter-name>
+		<filter-class>com.gitblit.servlet.RawFilter</filter-class>
 	</filter>
 	<filter-mapping>
-		<filter-name>BranchFilter</filter-name>
-		<url-pattern>/branch/*</url-pattern>
+		<filter-name>RawFilter</filter-name>
+		<url-pattern>/raw/*</url-pattern>
 	</filter-mapping>
 	
 
@@ -340,12 +340,12 @@
              	* FederationServlet <url-pattern>
              	* RpcFilter <url-pattern>
              	* RpcServlet <url-pattern>
-             	* BranchFilter <url-pattern>
-             	* BranchServlet <url-pattern>
+             	* RawFilter <url-pattern>
+             	* RawServlet <url-pattern>
              	* PagesFilter <url-pattern>
              	* PagesServlet <url-pattern>
              	* com.gitblit.Constants.PAGES_PATH -->
-            <param-value>r/,git/,pt,feed/,zip/,federation/,rpc/,branch/,pages/,robots.txt,logo.png,graph/,sparkleshare/</param-value>
+            <param-value>r/,git/,pt,feed/,zip/,federation/,rpc/,raw/,pages/,robots.txt,logo.png,graph/,sparkleshare/</param-value>
         </init-param>
     </filter>
     <filter-mapping>
diff --git a/src/main/java/com/gitblit/Constants.java b/src/main/java/com/gitblit/Constants.java
index 96f13c8..4b9755f 100644
--- a/src/main/java/com/gitblit/Constants.java
+++ b/src/main/java/com/gitblit/Constants.java
@@ -68,7 +68,7 @@
 
 	public static final String SPARKLESHARE_INVITE_PATH = "/sparkleshare/";
 
-	public static final String BRANCH = "/branch/";
+	public static final String RAW_PATH = "/raw/";
 
 	public static final String BRANCH_GRAPH_PATH = "/graph/";
 
diff --git a/src/main/java/com/gitblit/servlet/PagesFilter.java b/src/main/java/com/gitblit/servlet/PagesFilter.java
index 0535ea0..e07d9b3 100644
--- a/src/main/java/com/gitblit/servlet/PagesFilter.java
+++ b/src/main/java/com/gitblit/servlet/PagesFilter.java
@@ -23,7 +23,7 @@
  * @author James Moger
  *
  */
-public class PagesFilter extends BranchFilter {
+public class PagesFilter extends RawFilter {
 
 
 }
diff --git a/src/main/java/com/gitblit/servlet/PagesServlet.java b/src/main/java/com/gitblit/servlet/PagesServlet.java
index 7919e44..f578f86 100644
--- a/src/main/java/com/gitblit/servlet/PagesServlet.java
+++ b/src/main/java/com/gitblit/servlet/PagesServlet.java
@@ -26,7 +26,7 @@
  * @author James Moger
  *
  */
-public class PagesServlet extends BranchServlet {
+public class PagesServlet extends RawServlet {
 
 	private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/com/gitblit/servlet/BranchFilter.java b/src/main/java/com/gitblit/servlet/RawFilter.java
similarity index 95%
rename from src/main/java/com/gitblit/servlet/BranchFilter.java
rename to src/main/java/com/gitblit/servlet/RawFilter.java
index 58b8f43..34989c9 100644
--- a/src/main/java/com/gitblit/servlet/BranchFilter.java
+++ b/src/main/java/com/gitblit/servlet/RawFilter.java
@@ -22,13 +22,13 @@
 import com.gitblit.models.UserModel;
 
 /**
- * The BranchFilter is an AccessRestrictionFilter which ensures http branch
+ * The RawFilter is an AccessRestrictionFilter which ensures http branch
  * requests for a view-restricted repository are authenticated and authorized.
  *
  * @author James Moger
  *
  */
-public class BranchFilter extends AccessRestrictionFilter {
+public class RawFilter extends AccessRestrictionFilter {
 
 	/**
 	 * Extract the repository name from the url.
diff --git a/src/main/java/com/gitblit/servlet/BranchServlet.java b/src/main/java/com/gitblit/servlet/RawServlet.java
similarity index 94%
rename from src/main/java/com/gitblit/servlet/BranchServlet.java
rename to src/main/java/com/gitblit/servlet/RawServlet.java
index 3380896..cde7b2e 100644
--- a/src/main/java/com/gitblit/servlet/BranchServlet.java
+++ b/src/main/java/com/gitblit/servlet/RawServlet.java
@@ -65,11 +65,11 @@
  * @author James Moger
  *
  */
-public class BranchServlet extends DaggerServlet {
+public class RawServlet extends DaggerServlet {
 
 	private static final long serialVersionUID = 1L;
 
-	private transient Logger logger = LoggerFactory.getLogger(BranchServlet.class);
+	private transient Logger logger = LoggerFactory.getLogger(RawServlet.class);
 
 	private IRuntimeManager runtimeManager;
 
@@ -99,7 +99,7 @@
 			encodedPath = URLEncoder.encode(encodedPath, "UTF-8");
 		} catch (UnsupportedEncodingException e) {
 		}
-		return baseURL + Constants.BRANCH + repository + "/" + (branch == null ? "" : (branch + "/" + (path == null ? "" : (encodedPath + "/"))));
+		return baseURL + Constants.RAW_PATH + repository + "/" + (branch == null ? "" : (branch + "/" + (path == null ? "" : encodedPath)));
 	}
 
 	protected String getBranch(String repository, HttpServletRequest request) {
@@ -333,18 +333,9 @@
 				String str = MessageFormat.format(
 						"# Error\nSorry, the requested resource **{0}** was not found.",
 						requestedPath);
-				String content = MarkdownUtils.transformMarkdown(str);
-
-				try {
-					response.setStatus(HttpServletResponse.SC_NOT_FOUND);
-
-					byte [] bytes = content.getBytes(Constants.ENCODING);
-					ByteArrayInputStream is = new ByteArrayInputStream(bytes);
-					sendContent(response, new Date(), is);
-					return;
-				} catch (Throwable t) {
-					logger.error("Failed to write page to client", t);
-				}
+				response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+				error(response, str);
+				return;
 			} else {
 				//
 				// directory list
@@ -373,7 +364,8 @@
 				for (PathModel entry : pathEntries) {
 					String pp = URLEncoder.encode(entry.name, Constants.ENCODING);
 					response.getWriter().append(MessageFormat.format(pattern, basePath, pp,
-							JGitUtils.getPermissionsFromMode(entry.mode), byteFormat.format(entry.size)));
+							JGitUtils.getPermissionsFromMode(entry.mode),
+							entry.isFile() ? byteFormat.format(entry.size) : ""));
 				}
 				response.getWriter().append("</tbody>");
 				response.getWriter().append("</table>");
diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
index 9f002d2..dc79af2 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebApp.java
@@ -64,13 +64,13 @@
 import com.gitblit.wicket.pages.LuceneSearchPage;
 import com.gitblit.wicket.pages.MetricsPage;
 import com.gitblit.wicket.pages.MyDashboardPage;
+import com.gitblit.wicket.pages.MyTicketsPage;
 import com.gitblit.wicket.pages.NewMilestonePage;
 import com.gitblit.wicket.pages.NewTicketPage;
 import com.gitblit.wicket.pages.OverviewPage;
 import com.gitblit.wicket.pages.PatchPage;
 import com.gitblit.wicket.pages.ProjectPage;
 import com.gitblit.wicket.pages.ProjectsPage;
-import com.gitblit.wicket.pages.RawPage;
 import com.gitblit.wicket.pages.ReflogPage;
 import com.gitblit.wicket.pages.RepositoriesPage;
 import com.gitblit.wicket.pages.ReviewProposalPage;
@@ -81,7 +81,6 @@
 import com.gitblit.wicket.pages.TreePage;
 import com.gitblit.wicket.pages.UserPage;
 import com.gitblit.wicket.pages.UsersPage;
-import com.gitblit.wicket.pages.MyTicketsPage;
 
 public class GitBlitWebApp extends WebApplication {
 
@@ -173,7 +172,6 @@
 		mount("/tag", TagPage.class, "r", "h");
 		mount("/tree", TreePage.class, "r", "h", "f");
 		mount("/blob", BlobPage.class, "r", "h", "f");
-		mount("/raw", RawPage.class, "r", "h", "f");
 		mount("/blobdiff", BlobDiffPage.class, "r", "h", "f");
 		mount("/commitdiff", CommitDiffPage.class, "r", "h");
 		mount("/compare", ComparePage.class, "r", "h");
diff --git a/src/main/java/com/gitblit/wicket/MarkupProcessor.java b/src/main/java/com/gitblit/wicket/MarkupProcessor.java
index ff6fbce..e7681f2 100644
--- a/src/main/java/com/gitblit/wicket/MarkupProcessor.java
+++ b/src/main/java/com/gitblit/wicket/MarkupProcessor.java
@@ -56,11 +56,11 @@
 import com.gitblit.IStoredSettings;
 import com.gitblit.Keys;
 import com.gitblit.models.PathModel;
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.pages.DocPage;
-import com.gitblit.wicket.pages.RawPage;
 import com.google.common.base.Joiner;
 
 /**
@@ -260,7 +260,8 @@
 				if (imagePath.indexOf("://") == -1) {
 					// relative image
 					String path = doc.getRelativePath(imagePath);
-					url = getWicketUrl(RawPage.class, repositoryName, commitId, path);
+					String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot();
+					url = RawServlet.asLink(contextUrl, repositoryName, commitId, path);
 				} else {
 					// absolute image
 					url = imagePath;
@@ -312,7 +313,8 @@
 				if (node.url.indexOf("://") == -1) {
 					// repository-relative image link
 					String path = doc.getRelativePath(node.url);
-					String url = getWicketUrl(RawPage.class, repositoryName, commitId, path);
+					String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot();
+					String url = RawServlet.asLink(contextUrl, repositoryName, commitId, path);
 					return new Rendering(url, text);
 				}
 				// absolute image link
@@ -325,7 +327,8 @@
 				if (url.indexOf("://") == -1) {
 					// repository-relative image link
 					String path = doc.getRelativePath(url);
-					String wurl = getWicketUrl(RawPage.class, repositoryName, commitId, path);
+					String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot();
+					String wurl = RawServlet.asLink(contextUrl, repositoryName, commitId, path);
 					rendering = new Rendering(wurl, alt);
 				} else {
 					// absolute image link
diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.java b/src/main/java/com/gitblit/wicket/pages/BasePage.java
index 7d3d3a2..4971039 100644
--- a/src/main/java/com/gitblit/wicket/pages/BasePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/BasePage.java
@@ -98,6 +98,10 @@
 		}
 	}
 
+	protected String getContextUrl() {
+		return getRequest().getRelativePathPrefixToContextRoot();
+	}
+
 	protected String getCanonicalUrl() {
 		return getCanonicalUrl(getClass(), getPageParameters());
 	}
diff --git a/src/main/java/com/gitblit/wicket/pages/BlobPage.java b/src/main/java/com/gitblit/wicket/pages/BlobPage.java
index 299d8db..f3d0bc9 100644
--- a/src/main/java/com/gitblit/wicket/pages/BlobPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/BlobPage.java
@@ -24,10 +24,12 @@
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.html.link.ExternalLink;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 
 import com.gitblit.Keys;
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.CacheControl;
@@ -57,8 +59,8 @@
 					WicketUtils.newPathParameter(repositoryName, objectId, blobPath))
 					.setEnabled(false));
 			add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class).setEnabled(false));
-			add(new BookmarkablePageLink<Void>("rawLink", RawPage.class,
-					WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));
+			String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, objectId, blobPath);
+			add(new ExternalLink("rawLink",  rawUrl));
 			add(new CommitHeaderPanel("commitHeader", objectId));
 			add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, blobPath, objectId));
 			Component c = new Label("blobText", JGitUtils.getStringContent(r, objectId, encodings));
@@ -87,8 +89,8 @@
 					WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));
 			add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class,
 					WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));
-			add(new BookmarkablePageLink<Void>("rawLink", RawPage.class,
-					WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));
+			String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, objectId, blobPath);
+			add(new ExternalLink("rawLink", rawUrl));
 
 			add(new CommitHeaderPanel("commitHeader", repositoryName, commit));
 
@@ -115,7 +117,7 @@
 				case 2:
 					// image blobs
 					add(new Label("blobText").setVisible(false));
-					add(new ExternalImage("blobImage", urlFor(RawPage.class, WicketUtils.newPathParameter(repositoryName, objectId, blobPath)).toString()));
+					add(new ExternalImage("blobImage", rawUrl));
 					break;
 				case 3:
 					// binary blobs
diff --git a/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java b/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java
index 7f2a8a6..71a5ea6 100644
--- a/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java
@@ -34,6 +34,7 @@
 import com.gitblit.models.GitNote;
 import com.gitblit.models.PathModel.PathChangeModel;
 import com.gitblit.models.SubmoduleModel;
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.DiffUtils;
 import com.gitblit.utils.DiffUtils.DiffOutput;
 import com.gitblit.utils.DiffUtils.DiffOutputType;
@@ -170,8 +171,8 @@
 					item.add(new BookmarkablePageLink<Void>("view", BlobPage.class, WicketUtils
 							.newPathParameter(repositoryName, entry.commitId, entry.path))
 							.setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
-					item.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils
-							.newPathParameter(repositoryName, entry.commitId, entry.path))
+					String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, entry.commitId, entry.path);
+					item.add(new ExternalLink("raw", rawUrl)
 							.setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
 					item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, WicketUtils
 							.newPathParameter(repositoryName, entry.commitId, entry.path))
diff --git a/src/main/java/com/gitblit/wicket/pages/CommitPage.java b/src/main/java/com/gitblit/wicket/pages/CommitPage.java
index 8bc9848..6fadec5 100644
--- a/src/main/java/com/gitblit/wicket/pages/CommitPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/CommitPage.java
@@ -35,6 +35,7 @@
 import com.gitblit.models.GitNote;
 import com.gitblit.models.PathModel.PathChangeModel;
 import com.gitblit.models.SubmoduleModel;
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.wicket.CacheControl;
 import com.gitblit.wicket.CacheControl.LastModified;
@@ -222,8 +223,8 @@
 					item.add(new BookmarkablePageLink<Void>("view", BlobPage.class, WicketUtils
 							.newPathParameter(repositoryName, entry.commitId, entry.path))
 							.setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
-					item.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils
-							.newPathParameter(repositoryName, entry.commitId, entry.path))
+					String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, entry.commitId, entry.path);
+					item.add(new ExternalLink("raw", rawUrl)
 							.setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
 					item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, WicketUtils
 							.newPathParameter(repositoryName, entry.commitId, entry.path))
diff --git a/src/main/java/com/gitblit/wicket/pages/ComparePage.java b/src/main/java/com/gitblit/wicket/pages/ComparePage.java
index 2024bf1..1ec6613 100644
--- a/src/main/java/com/gitblit/wicket/pages/ComparePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ComparePage.java
@@ -41,6 +41,7 @@
 import com.gitblit.models.RefModel;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.SubmoduleModel;
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.DiffUtils;
 import com.gitblit.utils.DiffUtils.DiffOutput;
 import com.gitblit.utils.DiffUtils.DiffOutputType;
@@ -184,8 +185,8 @@
 						item.add(new BookmarkablePageLink<Void>("view", BlobPage.class, WicketUtils
 								.newPathParameter(repositoryName, endId, entry.path))
 								.setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
-						item.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils
-								.newPathParameter(repositoryName, endId, entry.path))
+						String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, endId, entry.path);
+						item.add(new ExternalLink("raw", rawUrl)
 								.setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
 						item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, WicketUtils
 								.newPathParameter(repositoryName, endId, entry.path))
diff --git a/src/main/java/com/gitblit/wicket/pages/DocPage.java b/src/main/java/com/gitblit/wicket/pages/DocPage.java
index bf99978..c06d806 100644
--- a/src/main/java/com/gitblit/wicket/pages/DocPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/DocPage.java
@@ -20,10 +20,12 @@
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.html.link.ExternalLink;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.BugtraqProcessor;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.StringUtils;
@@ -87,8 +89,8 @@
 				WicketUtils.newPathParameter(repositoryName, objectId, documentPath)));
 		fragment.add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class,
 				WicketUtils.newPathParameter(repositoryName, objectId, documentPath)));
-		fragment.add(new BookmarkablePageLink<Void>("rawLink", RawPage.class, WicketUtils.newPathParameter(
-				repositoryName, objectId, documentPath)));
+		String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, objectId, documentPath);
+		fragment.add(new ExternalLink("rawLink", rawUrl));
 
 		fragment.add(new Label("content", markupDoc.html).setEscapeModelStrings(false));
 		add(fragment);
diff --git a/src/main/java/com/gitblit/wicket/pages/DocsPage.java b/src/main/java/com/gitblit/wicket/pages/DocsPage.java
index 907dd6e..fc56ee0 100644
--- a/src/main/java/com/gitblit/wicket/pages/DocsPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/DocsPage.java
@@ -31,6 +31,7 @@
 import org.eclipse.jgit.revwalk.RevCommit;
 
 import com.gitblit.models.PathModel;
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.ByteFormat;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.StringUtils;
@@ -103,8 +104,8 @@
 							WicketUtils.newPathParameter(repositoryName, commitId, doc.documentPath)));
 					item.add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class,
 							WicketUtils.newPathParameter(repositoryName, commitId, doc.documentPath)));
-					item.add(new BookmarkablePageLink<Void>("rawLink", RawPage.class, WicketUtils.newPathParameter(
-							repositoryName, commitId, doc.documentPath)));
+					String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, commitId, doc.documentPath);
+					item.add(new ExternalLink("rawLink", rawUrl));
 
 					// document content
 					String file = StringUtils.getLastPathElement(doc.documentPath);
@@ -145,8 +146,8 @@
 				// links
 				item.add(new BookmarkablePageLink<Void>("view", DocPage.class, WicketUtils
 						.newPathParameter(repositoryName, id, entry.path)));
-				item.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils
-						.newPathParameter(repositoryName, id, entry.path)));
+				String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, id, entry.path);
+				item.add(new ExternalLink("raw", rawUrl));
 				item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class, WicketUtils
 						.newPathParameter(repositoryName, id, entry.path)));
 				item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, WicketUtils
diff --git a/src/main/java/com/gitblit/wicket/pages/TreePage.java b/src/main/java/com/gitblit/wicket/pages/TreePage.java
index d6bf1fe..722b824 100644
--- a/src/main/java/com/gitblit/wicket/pages/TreePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/TreePage.java
@@ -20,6 +20,7 @@
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.html.link.ExternalLink;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
@@ -30,6 +31,7 @@
 
 import com.gitblit.models.PathModel;
 import com.gitblit.models.SubmoduleModel;
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.ByteFormat;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.wicket.CacheControl;
@@ -162,8 +164,8 @@
 						links.add(new BookmarkablePageLink<Void>("view", BlobPage.class,
 								WicketUtils.newPathParameter(repositoryName, id,
 										path)));
-						links.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils
-								.newPathParameter(repositoryName, id, path)));
+						String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, id, path);
+						links.add(new ExternalLink("raw", rawUrl));
 						links.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,
 								WicketUtils.newPathParameter(repositoryName, id,
 										path)));
diff --git a/src/main/java/com/gitblit/wicket/panels/TagsPanel.java b/src/main/java/com/gitblit/wicket/panels/TagsPanel.java
index 9f3987b..f1f8273 100644
--- a/src/main/java/com/gitblit/wicket/panels/TagsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/TagsPanel.java
@@ -17,9 +17,11 @@
 
 import java.util.List;
 
+import org.apache.wicket.RequestCycle;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.html.link.ExternalLink;
 import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
@@ -29,13 +31,13 @@
 import org.eclipse.jgit.lib.Repository;
 
 import com.gitblit.models.RefModel;
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.pages.BlobPage;
 import com.gitblit.wicket.pages.CommitPage;
 import com.gitblit.wicket.pages.LogPage;
-import com.gitblit.wicket.pages.RawPage;
 import com.gitblit.wicket.pages.TagPage;
 import com.gitblit.wicket.pages.TagsPage;
 import com.gitblit.wicket.pages.TreePage;
@@ -113,9 +115,10 @@
 							.newObjectParameter(repositoryName, entry.getReferencedObjectId()
 									.getName())));
 
-					fragment.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils
-							.newObjectParameter(repositoryName, entry.getReferencedObjectId()
-									.getName())));
+					String contextUrl = RequestCycle.get().getRequest().getRelativePathPrefixToContextRoot();
+					String rawUrl = RawServlet.asLink(contextUrl, repositoryName, entry.displayName,
+							entry.getReferencedObjectId().getName());
+					fragment.add(new ExternalLink("raw", rawUrl));
 					item.add(fragment);
 				} else {
 					// TODO Tree Tag Object

--
Gitblit v1.9.1