Fix cloning repositories with + in their names
diff --git a/src/main/java/com/gitblit/servlet/AuthenticationFilter.java b/src/main/java/com/gitblit/servlet/AuthenticationFilter.java
index dd821ac..ddb85f4 100644
--- a/src/main/java/com/gitblit/servlet/AuthenticationFilter.java
+++ b/src/main/java/com/gitblit/servlet/AuthenticationFilter.java
@@ -16,8 +16,6 @@
 package com.gitblit.servlet;

 

 import java.io.IOException;

-import java.io.UnsupportedEncodingException;

-import java.net.URLDecoder;

 import java.security.Principal;

 import java.util.Enumeration;

 import java.util.HashMap;

@@ -102,12 +100,6 @@
 			url = url.substring(1);

 		}

 		String fullUrl = url + (StringUtils.isEmpty(params) ? "" : ("?" + params));

-		try {

-			fullUrl = URLDecoder.decode(fullUrl, "UTF-8");

-		} catch (UnsupportedEncodingException e) {

-			logger.warn("UTF-8 decoding of URL failed: "+fullUrl, e);

-			e.printStackTrace();

-		}

 		return fullUrl;

 	}

 

diff --git a/src/main/java/com/gitblit/utils/StringUtils.java b/src/main/java/com/gitblit/utils/StringUtils.java
index d7e1ea3..087de54 100644
--- a/src/main/java/com/gitblit/utils/StringUtils.java
+++ b/src/main/java/com/gitblit/utils/StringUtils.java
@@ -129,6 +129,8 @@
 				retStr.append("%20");

 			} else if (inStr.charAt(i) == '&') {

 				retStr.append("%26");

+			} else if (inStr.charAt(i) == '+') {

+				retStr.append("%2B");

 			} else {

 				retStr.append(inStr.charAt(i));

 			}

@@ -398,7 +400,7 @@
 	 * @return the first invalid character found or null if string is acceptable

 	 */

 	public static Character findInvalidCharacter(String name) {

-		char[] validChars = { '/', '.', '_', '-', '~' };

+		char[] validChars = { '/', '.', '_', '-', '~', '+' };

 		for (char c : name.toCharArray()) {

 			if (!Character.isLetterOrDigit(c)) {

 				boolean ok = false;

diff --git a/src/site/administration.mkd b/src/site/administration.mkd
index 6fc334e..049a827 100644
--- a/src/site/administration.mkd
+++ b/src/site/administration.mkd
@@ -20,7 +20,7 @@
 	    federationSets = 

 

 #### Repository Names

-Repository names must be case-insensitive-unique but are CASE-SENSITIVE ON CASE-SENSITIVE FILESYSTEMS.  The name must be composed of letters, digits, or `/ _ - . ~`<br/>

+Repository names must be case-insensitive-unique but are CASE-SENSITIVE ON CASE-SENSITIVE FILESYSTEMS.  The name must be composed of letters, digits, or `/ _ - . ~ +`<br/>

 Whitespace is illegal.

 

 Repositories can be grouped within subfolders.  e.g. *libraries/mycoollib.git* and *libraries/myotherlib.git*