From 477412d32836c6a8821f17ff0c26a3c18843d815 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 05 May 2014 10:32:38 -0400
Subject: [PATCH] Add raw links to branches

---
 src/main/java/com/gitblit/wicket/panels/BasePanel.java     |    4 ++++
 src/main/java/com/gitblit/wicket/panels/BranchesPanel.html |    6 +++---
 src/main/java/com/gitblit/servlet/RawServlet.java          |   15 +++++++++++++--
 src/main/java/com/gitblit/wicket/panels/BranchesPanel.java |    5 +++++
 4 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/gitblit/servlet/RawServlet.java b/src/main/java/com/gitblit/servlet/RawServlet.java
index cde7b2e..15e036e 100644
--- a/src/main/java/com/gitblit/servlet/RawServlet.java
+++ b/src/main/java/com/gitblit/servlet/RawServlet.java
@@ -94,7 +94,17 @@
 		if (baseURL.length() > 0 && baseURL.charAt(baseURL.length() - 1) == '/') {
 			baseURL = baseURL.substring(0, baseURL.length() - 1);
 		}
-		String encodedPath = path.replace(' ', '-');
+
+		if (branch != null) {
+			char fsc = '!';
+			char c = GitblitContext.getManager(IRuntimeManager.class).getSettings().getChar(Keys.web.forwardSlashCharacter, '/');
+			if (c != '/') {
+				fsc = c;
+			}
+			branch = branch.replace('/', fsc);
+		}
+
+		String encodedPath = path == null ? "" : path.replace(' ', '-');
 		try {
 			encodedPath = URLEncoder.encode(encodedPath, "UTF-8");
 		} catch (UnsupportedEncodingException e) {
@@ -109,7 +119,8 @@
 		if (fs > -1) {
 			branch = branch.substring(0, fs);
 		}
-		return branch;
+		char c = runtimeManager.getSettings().getChar(Keys.web.forwardSlashCharacter, '/');
+		return branch.replace('!', '/').replace(c, '/');
 	}
 
 	protected String getPath(String repository, String branch, HttpServletRequest request) {
diff --git a/src/main/java/com/gitblit/wicket/panels/BasePanel.java b/src/main/java/com/gitblit/wicket/panels/BasePanel.java
index dda5797..e8f8f6f 100644
--- a/src/main/java/com/gitblit/wicket/panels/BasePanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/BasePanel.java
@@ -44,6 +44,10 @@
 		return GitBlitWebApp.get();
 	}
 
+	protected String getContextUrl() {
+		return getRequest().getRelativePathPrefixToContextRoot();
+	}
+
 	protected TimeZone getTimeZone() {
 		return app().settings().getBoolean(Keys.web.useClientTimezone, false) ? GitBlitWebSession.get()
 				.getTimezone() : app().getTimezone();
diff --git a/src/main/java/com/gitblit/wicket/panels/BranchesPanel.html b/src/main/java/com/gitblit/wicket/panels/BranchesPanel.html
index e95b283..05df23e 100644
--- a/src/main/java/com/gitblit/wicket/panels/BranchesPanel.html
+++ b/src/main/java/com/gitblit/wicket/panels/BranchesPanel.html
@@ -29,21 +29,21 @@
 	<!-- branch page links -->
 	<wicket:fragment wicket:id="branchPageLinks">
 		<span class="link">
-			<a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a> | <a wicket:id="metrics"><wicket:message key="gb.metrics"></wicket:message></a> | <a wicket:id="syndication"><wicket:message key="gb.feed"></wicket:message></a>
+			<a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a>  | <a wicket:id="raw"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="metrics"><wicket:message key="gb.metrics"></wicket:message></a> | <a wicket:id="syndication"><wicket:message key="gb.feed"></wicket:message></a>
 		</span>
 	</wicket:fragment>
 
 	<!-- branch page admin links -->
 	<wicket:fragment wicket:id="branchPageAdminLinks">
 		<span class="link">
-			<a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a> | <a wicket:id="metrics"><wicket:message key="gb.metrics"></wicket:message></a> | <a wicket:id="syndication"><wicket:message key="gb.feed"></wicket:message></a> | <a wicket:id="deleteBranch"><wicket:message key="gb.delete"></wicket:message></a>
+			<a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a>  | <a wicket:id="raw"><wicket:message key="gb.raw"></wicket:message></a> | <a wicket:id="metrics"><wicket:message key="gb.metrics"></wicket:message></a> | <a wicket:id="syndication"><wicket:message key="gb.feed"></wicket:message></a> | <a wicket:id="deleteBranch"><wicket:message key="gb.delete"></wicket:message></a>
 		</span>
 	</wicket:fragment>
 
 	<!-- branch panel links -->
 	<wicket:fragment wicket:id="branchPanelLinks">
 		<span class="link">
-			<a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a>
+			<a wicket:id="log"><wicket:message key="gb.log"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a>  | <a wicket:id="raw"><wicket:message key="gb.raw"></wicket:message></a>
 		</span>
 	</wicket:fragment>
 			
diff --git a/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java b/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java
index 6a7873e..4bf00f8 100644
--- a/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java
@@ -40,6 +40,7 @@
 import com.gitblit.models.RefModel;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.UserModel;
+import com.gitblit.servlet.RawServlet;
 import com.gitblit.servlet.SyndicationServlet;
 import com.gitblit.utils.CommitCache;
 import com.gitblit.utils.JGitUtils;
@@ -143,6 +144,8 @@
 							.newObjectParameter(model.name, entry.getName())));
 					fragment.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
 							.newObjectParameter(model.name, entry.getName())));
+					String rawUrl = RawServlet.asLink(getContextUrl(), model.name, Repository.shortenRefName(entry.getName()), null);
+					fragment.add(new ExternalLink("raw",  rawUrl));
 					fragment.add(new BookmarkablePageLink<Void>("metrics", MetricsPage.class,
 							WicketUtils.newObjectParameter(model.name, entry.getName())));
 					fragment.add(new ExternalLink("syndication", SyndicationServlet.asLink(
@@ -158,6 +161,8 @@
 							.newObjectParameter(model.name, entry.getName())));
 					fragment.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
 							.newObjectParameter(model.name, entry.getName())));
+					String rawUrl = RawServlet.asLink(getContextUrl(), model.name, Repository.shortenRefName(entry.getName()), null);
+					fragment.add(new ExternalLink("raw",  rawUrl));
 					item.add(fragment);
 				}
 				WicketUtils.setAlternatingBackground(item, counter);

--
Gitblit v1.9.1