From d22773711cf6e7d730e5542d01312ff1965554ba Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 24 Jul 2013 10:42:11 -0400
Subject: [PATCH] Automatically decode %7E in repository names to ~ (issue-278)

---
 releases.moxie                         |    3 ++-
 src/main/java/com/gitblit/GitBlit.java |    8 ++++++++
 2 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/releases.moxie b/releases.moxie
index b4b17e1..63adbd3 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -13,12 +13,13 @@
     security: ~
     fixes:
 	- Gitblit-as-viewer with no repository urls failed to display summary page (issue 269)
+	- Fixed incorrect tagger in the dashboard pages (issue-276)
+	- Automatically decode %7E in repository names from git clients that encode ~ (issue-278)
 	- Fixed missing model class dependencies in Gitblit Manager build
 	- Fix for IE10 compatibility mode
 	- Reset dashboard and activity commit cache on branch REWIND or DELETE
 	- Fixed bug with adding new local users with external authentication
 	- Fixed missing clone url on the empty repository page
-	- Fixed incorrect tagger in the dashboard pages (issue-276)
 	- Fixed Ubuntu service script for LSB compliance
 	- Inserted "sleep 5" in Ubuntu & Centos bash script for service restart
     changes:    
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index efdaad1..e47c4c6 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -1557,6 +1557,10 @@
 	 * @return repository or null
 	 */
 	public Repository getRepository(String repositoryName, boolean logError) {
+		// Decode url-encoded repository name (issue-278)
+		// http://stackoverflow.com/questions/17183110
+		repositoryName = repositoryName.replace("%7E", "~").replace("%7e", "~");
+		
 		if (isCollectingGarbage(repositoryName)) {
 			logger.warn(MessageFormat.format("Rejecting request for {0}, busy collecting garbage!", repositoryName));
 			return null;
@@ -1656,6 +1660,10 @@
 	 * @return repository model or null
 	 */
 	public RepositoryModel getRepositoryModel(String repositoryName) {
+		// Decode url-encoded repository name (issue-278)
+		// http://stackoverflow.com/questions/17183110
+		repositoryName = repositoryName.replace("%7E", "~").replace("%7e", "~");
+
 		if (!repositoryListCache.containsKey(repositoryName)) {
 			RepositoryModel model = loadRepositoryModel(repositoryName);
 			if (model == null) {

--
Gitblit v1.9.1