summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/gitblit/servlet/RawServlet.java17
-rw-r--r--src/test/java/com/gitblit/servlet/RawServletTest.java32
2 files changed, 27 insertions, 22 deletions
diff --git a/src/main/java/com/gitblit/servlet/RawServlet.java b/src/main/java/com/gitblit/servlet/RawServlet.java
index b0cba787..9161eb6a 100644
--- a/src/main/java/com/gitblit/servlet/RawServlet.java
+++ b/src/main/java/com/gitblit/servlet/RawServlet.java
@@ -69,6 +69,9 @@ import com.google.inject.Singleton;
@Singleton
public class RawServlet extends HttpServlet {
+ // Forward slash character
+ static final char FSC = '!';
+
private static final long serialVersionUID = 1L;
private transient Logger logger = LoggerFactory.getLogger(RawServlet.class);
@@ -106,10 +109,9 @@ public class RawServlet extends HttpServlet {
repository = repository.substring(1);
}
- char fsc = '!';
- char c = GitblitContext.getManager(IRuntimeManager.class).getSettings().getChar(Keys.web.forwardSlashCharacter, '/');
- if (c != '/') {
- fsc = c;
+ char fsc = GitblitContext.getManager(IRuntimeManager.class).getSettings().getChar(Keys.web.forwardSlashCharacter, '/');
+ if (fsc == '/') {
+ fsc = FSC;
}
if (branch != null) {
branch = Repository.shortenRefName(branch).replace('/', fsc);
@@ -164,7 +166,11 @@ public class RawServlet extends HttpServlet {
String getPath(String repository, String branch, String pathInfo)
{
if (pathInfo == null || pathInfo.isEmpty() || pathInfo.equals("/")) return "";
- String base = repository + "/" + branch;
+
+ // Make the branch look like in the URL, or else it won't match later in the `indexOf`.
+ char c = runtimeManager.getSettings().getChar(Keys.web.forwardSlashCharacter, '/');
+ char fsc = (c == '/') ? FSC : c;
+ String base = repository + "/" + Repository.shortenRefName(branch).replace('/', fsc);
// 'repository/' or 'repository/branch' or 'repository/branch/'
if (pathInfo.equals(base)) {
@@ -182,7 +188,6 @@ public class RawServlet extends HttpServlet {
// 'leadin/repository/branch/path'
String path = pathInfo.substring(pathStart);
- char c = runtimeManager.getSettings().getChar(Keys.web.forwardSlashCharacter, '/');
path = path.replace('!', '/').replace(c, '/');
// 'repository/branch/path/'
diff --git a/src/test/java/com/gitblit/servlet/RawServletTest.java b/src/test/java/com/gitblit/servlet/RawServletTest.java
index dac9896e..50587178 100644
--- a/src/test/java/com/gitblit/servlet/RawServletTest.java
+++ b/src/test/java/com/gitblit/servlet/RawServletTest.java
@@ -17,7 +17,7 @@ import static org.mockito.Mockito.mock;
public class RawServletTest
{
- private static final String FSC = "!";
+ private static final char FSC = RawServlet.FSC;
private static MockRuntimeManager mockRuntimeManager = new MockRuntimeManager();
private static IStoredSettings settings;
@@ -170,7 +170,7 @@ public class RawServletTest
String link = RawServlet.asLink(baseUrl, repository, branch, path);
assertNotNull(link);
- assertEquals(baseUrl + Constants.RAW_PATH + repository + "/" + branch.replaceAll("/", FSC) + "/", link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/" + branch.replace('/', FSC) + "/", link);
}
@Test
@@ -185,7 +185,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository + "/"
- + branch.replaceAll("/", FSC) + "/", link);
+ + branch.replace('/', FSC) + "/", link);
}
@Test
@@ -200,7 +200,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl + Constants.RAW_PATH + repository.substring(1) + "/"
- + branch.replaceAll("/", FSC) + "/", link);
+ + branch.replace('/', FSC) + "/", link);
}
@Test
@@ -215,7 +215,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository.substring(1) + "/"
- + branch.replaceAll("/", FSC) + "/", link);
+ + branch.replace('/', FSC) + "/", link);
}
@@ -245,7 +245,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository + "/"
- + branch + "/" + path.replaceAll("/", FSC), link);
+ + branch + "/" + path.replace('/', FSC), link);
}
@Test
@@ -274,7 +274,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository.substring(1) + "/"
- + branch + "/" + path.replaceAll("/", FSC), link);
+ + branch + "/" + path.replace('/', FSC), link);
}
@@ -290,7 +290,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
- + branch.replaceAll("/", FSC) + "/" + path, link);
+ + branch.replace('/', FSC) + "/" + path, link);
}
@Test
@@ -305,7 +305,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository + "/"
- + branch.replaceAll("/", FSC) + "/" + path.replaceAll("/", FSC), link);
+ + branch.replace('/', FSC) + "/" + path.replace('/', FSC), link);
}
@Test
@@ -320,7 +320,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl + Constants.RAW_PATH + repository.substring(1) + "/"
- + branch.replaceAll("/", FSC) + "/" + path, link);
+ + branch.replace('/', FSC) + "/" + path, link);
}
@Test
@@ -335,7 +335,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository.substring(1) + "/"
- + branch.replaceAll("/", FSC) + "/" + path.replaceAll("/", FSC), link);
+ + branch.replace('/', FSC) + "/" + path.replace('/', FSC), link);
}
@Test
@@ -393,7 +393,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
- + branch.replaceAll("/", FSC) + "/", link);
+ + branch.replace('/', FSC) + "/", link);
}
@Test
@@ -423,7 +423,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl + Constants.RAW_PATH + repository.substring(1) + "/"
- + branch.replaceAll("/", FSC) + "/" + path.replaceAll("/", FSC), link);
+ + branch.replace('/', FSC) + "/" + path.replace('/', FSC), link);
}
@Test
@@ -541,7 +541,7 @@ public class RawServletTest
assertNotNull(link);
assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
- + branch + "/" + path.replaceAll("/", FSC), link);
+ + branch + "/" + path.replace('/', FSC), link);
}
@Test
@@ -1289,7 +1289,7 @@ public class RawServletTest
@Test
public void getPath_RepoBranchWithFsc_explicitFscSameAsDefault()
{
- settings.overrideSetting(Keys.web.forwardSlashCharacter, FSC);
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, String.valueOf(FSC));
String path = rawServlet.getPath("git.git", "some/feature", "git.git/some" + FSC + "feature");
@@ -1309,7 +1309,7 @@ public class RawServletTest
@Test
public void getPath_LeadindRepoBranchWithFscFolderFile_explicitFscSameAsDefault()
{
- settings.overrideSetting(Keys.web.forwardSlashCharacter, FSC);
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, String.valueOf(FSC));
String path = rawServlet.getPath("git.git", "some/feature", "IBM/git.git/some" + FSC + "feature/some" + FSC + "folder" + FSC + "file.dot");