summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--releases.moxie3
-rw-r--r--src/main/java/com/gitblit/servlet/PagesServlet.java7
-rw-r--r--src/main/java/com/gitblit/servlet/RawServlet.java92
-rw-r--r--src/test/java/com/gitblit/servlet/RawServletTest.java1426
-rw-r--r--src/test/java/com/gitblit/tests/mock/MockGitblitContext.java12
5 files changed, 1520 insertions, 20 deletions
diff --git a/releases.moxie b/releases.moxie
index 363e1a94..2a378a89 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -9,7 +9,8 @@ r32: {
html: ~
text: ~
security: ~
- fixes: ~
+ fixes:
+ - Fix raw links broken for branches with a forward slash in the name (issue-1290, issue-1234, issue-813)
changes: ~
additions: ~
dependencyChanges: ~
diff --git a/src/main/java/com/gitblit/servlet/PagesServlet.java b/src/main/java/com/gitblit/servlet/PagesServlet.java
index 1473e966..a76a50b5 100644
--- a/src/main/java/com/gitblit/servlet/PagesServlet.java
+++ b/src/main/java/com/gitblit/servlet/PagesServlet.java
@@ -69,13 +69,14 @@ public class PagesServlet extends RawServlet {
}
@Override
- protected String getBranch(String repository, HttpServletRequest request) {
+ String getBranch(String repository, String pathInfo)
+ {
return "gh-pages";
}
@Override
- protected String getPath(String repository, String branch, HttpServletRequest request) {
- String pi = request.getPathInfo().substring(1);
+ String getPath(String repository, String branch, String pi)
+ {
if (pi.equals(repository)) {
return "";
}
diff --git a/src/main/java/com/gitblit/servlet/RawServlet.java b/src/main/java/com/gitblit/servlet/RawServlet.java
index dca57730..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);
@@ -99,23 +102,45 @@ public class RawServlet extends HttpServlet {
if (baseURL.length() > 0 && baseURL.charAt(baseURL.length() - 1) == '/') {
baseURL = baseURL.substring(0, baseURL.length() - 1);
}
+ if (repository.length() > 0 && repository.charAt(repository.length() - 1) == '/') {
+ repository = repository.substring(0, repository.length() - 1);
+ }
+ if (repository.length() > 0 && repository.charAt(0) == '/') {
+ 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);
}
+ if (path != null && path.length() > 0 && path.charAt(0) == '/') {
+ path = path.substring(1);
+ }
String encodedPath = path == null ? "" : path.replace('/', fsc);
return baseURL + Constants.RAW_PATH + repository + "/" + (branch == null ? "" : (branch + "/" + encodedPath));
}
- protected String getBranch(String repository, HttpServletRequest request) {
- String pi = request.getPathInfo();
- String branch = pi.substring(pi.indexOf(repository) + repository.length() + 1);
+
+ /**
+ * Find and return the name of a branch from a given repository in a HTTP request path info.
+ * The branch name returned is transformed to the form in the repository, i.e. a transformation
+ * of the forward slash character in the URL is reversed.
+ *
+ * @param repository
+ * Path of repository, no leading slash, no trailing slash
+ * @param pathInfo
+ * The sanitised path info from a HTTP request, i.e. without the leading slash.
+ *
+ * @return The name of the branch from the path info, unescaped.
+ */
+ String getBranch(String repository, String pathInfo)
+ {
+ if (pathInfo == null || pathInfo.isEmpty() || pathInfo.equals("/")) return "";
+ String branch = pathInfo.substring(pathInfo.indexOf(repository) + repository.length() + 1);
int fs = branch.indexOf('/');
if (fs > -1) {
branch = branch.substring(0, fs);
@@ -124,18 +149,53 @@ public class RawServlet extends HttpServlet {
return branch.replace('!', '/').replace(c, '/');
}
- protected String getPath(String repository, String branch, HttpServletRequest request) {
- String base = repository + "/" + branch;
- String pi = request.getPathInfo().substring(1);
- if (pi.equals(base)) {
+ /**
+ * Find and return the path from a given repository and given branch in a HTTP request path info.
+ * The path string returned is transformed to the form in the repository, i.e. a transformation
+ * of the forward slash character in the URL is reversed.
+ *
+ * @param repository
+ * Path of repository, no leading slash, no trailing slash
+ * @param branch
+ * Branch name from the repository, i.e. with forward slash character, no leading slash, no trailing slash.
+ * @param pathInfo
+ * The sanitised path info from a HTTP request, i.e. without the leading slash.
+ *
+ * @return The file/folder path part from the path info, in unescaped form.
+ */
+ String getPath(String repository, String branch, String pathInfo)
+ {
+ if (pathInfo == null || pathInfo.isEmpty() || pathInfo.equals("/")) return "";
+
+ // 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)) {
return "";
}
- String path = pi.substring(pi.indexOf(base) + base.length() + 1);
+ // I have no idea why 'indexOf(base)' is used, which assumes something could come before 'base' in
+ // the pathInfo string. But since it is here, we handle it until we completly refactor the paths used
+ // in Gitblit to something sensible.
+ // 'leadin/repository/'
+ // 'leadin/repository/branch'
+ int pathStart = pathInfo.indexOf(base) + base.length();
+ // 'leadin/repository/branch/'
+ if (pathStart < pathInfo.length() && pathInfo.charAt(pathStart) == '/') pathStart++;
+ if (pathInfo.length() == pathStart) return "";
+ // 'leadin/repository/branch/path'
+ String path = pathInfo.substring(pathStart);
+
+ path = path.replace('!', '/').replace(c, '/');
+
+ // 'repository/branch/path/'
+ // 'leadin/repository/branch/path/'
if (path.endsWith("/")) {
path = path.substring(0, path.length() - 1);
}
- char c = runtimeManager.getSettings().getChar(Keys.web.forwardSlashCharacter, '/');
- return path.replace('!', '/').replace(c, '/');
+ return path;
}
protected boolean renderIndex() {
@@ -188,7 +248,7 @@ public class RawServlet extends HttpServlet {
}
// identify the branch
- String branch = getBranch(repository, request);
+ String branch = getBranch(repository, path);
if (StringUtils.isEmpty(branch)) {
branch = r.getBranch();
if (branch == null) {
@@ -207,7 +267,7 @@ public class RawServlet extends HttpServlet {
}
// identify the requested path
- String requestedPath = getPath(repository, branch, request);
+ String requestedPath = getPath(repository, branch, path);
// identify the commit
RevCommit commit = JGitUtils.getCommit(r, branch);
diff --git a/src/test/java/com/gitblit/servlet/RawServletTest.java b/src/test/java/com/gitblit/servlet/RawServletTest.java
new file mode 100644
index 00000000..50587178
--- /dev/null
+++ b/src/test/java/com/gitblit/servlet/RawServletTest.java
@@ -0,0 +1,1426 @@
+package com.gitblit.servlet;
+
+import com.gitblit.Constants;
+import com.gitblit.IStoredSettings;
+import com.gitblit.Keys;
+import com.gitblit.manager.IRepositoryManager;
+import com.gitblit.tests.mock.MockGitblitContext;
+import com.gitblit.tests.mock.MockRuntimeManager;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+
+public class RawServletTest
+{
+ private static final char FSC = RawServlet.FSC;
+
+ private static MockRuntimeManager mockRuntimeManager = new MockRuntimeManager();
+ private static IStoredSettings settings;
+
+ private IRepositoryManager repositoryMngr;
+
+ private RawServlet rawServlet;
+
+
+ @BeforeClass
+ public static void init()
+ {
+ MockGitblitContext gitblitContext = new MockGitblitContext();
+ gitblitContext.addManager(mockRuntimeManager);
+ settings = mockRuntimeManager.getSettings();
+ }
+
+ @Before
+ public void setUp()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "/");
+
+ repositoryMngr = mock(IRepositoryManager.class);
+ rawServlet = new RawServlet(mockRuntimeManager, repositoryMngr);
+ }
+
+
+
+ @Test
+ public void asLink_HttpUrlRepo()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "test.git";
+ String branch = null;
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepo()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "test.git";
+ String branch = null;
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoLeadingSlash()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "/test.git";
+ String branch = null;
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository.substring(1) + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepoLeadingSlash()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "/test.git";
+ String branch = null;
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository.substring(1) + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranch()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "test.git";
+ String branch = "b52";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/" + branch + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepoBranch()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "test.git";
+ String branch = "branch";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository + "/" + branch + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoLeadingSlashBranch()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "/test.git";
+ String branch = "featureOne";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository.substring(1) + "/" + branch + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepoLeadingSlashBranch()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "/test.git";
+ String branch = "b";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository.substring(1) + "/" + branch + "/", link);
+ }
+
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithSlash()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "test.git";
+ String branch = "feature/whatever";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/" + branch.replace('/', FSC) + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepoBranchWithSlash()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "test.git";
+ String branch = "branch/for/issue/16";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository + "/"
+ + branch.replace('/', FSC) + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoLeadingSlashBranchWithSlash()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "/test.git";
+ String branch = "releases/1.2.3";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository.substring(1) + "/"
+ + branch.replace('/', FSC) + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepoLeadingSlashBranchWithSlash()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "/test.git";
+ String branch = "b/52";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository.substring(1) + "/"
+ + branch.replace('/', FSC) + "/", link);
+ }
+
+
+ @Test
+ public void asLink_HttpUrlRepoBranchPathFile()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "test.git";
+ String branch = "b52";
+ String path = "file.txt";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/" + branch + "/" + path, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepoBranchPathFolderFile()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "test.git";
+ String branch = "branch";
+ String path = "path/to/file.png";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository + "/"
+ + branch + "/" + path.replace('/', FSC), link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoLeadingSlashBranchPathFolderLeadingSlash()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "/test.git";
+ String branch = "featureOne";
+ String path = "/folder";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository.substring(1) + "/" + branch + path, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepoLeadingSlashBranchSubFolder()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "/test.git";
+ String branch = "b";
+ String path = "sub/folder";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository.substring(1) + "/"
+ + branch + "/" + path.replace('/', FSC), link);
+ }
+
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithSlashPathFolder()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "test.git";
+ String branch = "feature/whatever";
+ String path = "folder";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch.replace('/', FSC) + "/" + path, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepoBranchWithSlashPathFolderFile()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "test.git";
+ String branch = "branch/for/issue/16";
+ String path = "a/file.gif";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository + "/"
+ + branch.replace('/', FSC) + "/" + path.replace('/', FSC), link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoLeadingSlashBranchWithSlashPathFile()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "/test.git";
+ String branch = "releases/1.2.3";
+ String path = "hurray.png";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository.substring(1) + "/"
+ + branch.replace('/', FSC) + "/" + path, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlTrailingSlashRepoLeadingSlashBranchWithSlashPathFolderFile()
+ {
+ String baseUrl = "http://localhost/";
+ String repository = "/test.git";
+ String branch = "b/52";
+ String path = "go/to/f.k";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl.substring(0, baseUrl.length()-1) + Constants.RAW_PATH + repository.substring(1) + "/"
+ + branch.replace('/', FSC) + "/" + path.replace('/', FSC), link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoInFolder()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "project/repo.git";
+ String branch = null;
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoInSubFolder()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "some/project/repo.git";
+ String branch = null;
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoInSubFolderBranch()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "some/project/repo.git";
+ String branch = "laluna";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoInSubFolderBranchWithSlash()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "some/project/repo.git";
+ String branch = "la/le/lu";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch.replace('/', FSC) + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoInSubFolderBranchPathFile()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "some/project/repo.git";
+ String branch = "laluna";
+ String path = "elrtkx.fg";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch + "/" + path, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoInSubFolderLeadingSlashBranchWithSlashPathFolderFile()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "/some/project/repo.git";
+ String branch = "la/le/lu";
+ String path = "doremi/fa/SOLA/di.mp3";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository.substring(1) + "/"
+ + branch.replace('/', FSC) + "/" + path.replace('/', FSC), link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoPathFolderFile()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = null;
+ String path = "doko/di.mp3";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoTrailingSlashPathFileLeadingSlash()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "repo.git/";
+ String branch = null;
+ String path = "/di.mp3";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchPathFileLeadingSlash()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "bee";
+ String path = "/bop.mp3";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch + path, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchPathFolderLeadingSlashTrailingSlash()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "bee";
+ String path = "/bam/";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch + "/bam" + FSC, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchPathSubFolderLeadingSlashTrailingSlash()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "bee";
+ String path = "/bapedi/boo/";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch + "/" + "bapedi" + FSC + "boo" + FSC, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoCommitId()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "c7eef37bfe5ae246cdf5ca5c502e4b5471290cb1";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoCommitIdPathFile()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "c7eef37bfe5ae246cdf5ca5c502e4b5471290cb1";
+ String path = "file";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch + "/" + path, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoCommitIdPathFolderFileFile()
+ {
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "c7eef37bfe5ae246cdf5ca5c502e4b5471290cb1";
+ String path = "file/in/folder";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch + "/" + path.replace('/', FSC), link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithSlash_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "|");
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "some/feature";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch.replaceAll("/", "|") + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithSlashPathFolderFile_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ";");
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "some/feature";
+ String path = "file/in/folder";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch.replaceAll("/", ";") + "/" + path.replaceAll("/", ";"), link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithSlash_explicitFscSameAsDefault()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "!");
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "some/feature";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch.replaceAll("/", "!") + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithSlashPathFolderFile_explicitFscSameAsDefault()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "!");
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "some/feature";
+ String path = "file/in/folder";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch.replaceAll("/", "!") + "/" + path.replaceAll("/", "!"), link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ":");
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "important" + FSC + "feature";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithSlashPathFileWithDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "|");
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "some/feature";
+ String path = "large" + FSC + "file";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch.replaceAll("/", "|") + "/" + path, link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithDefaultFscAndSlash_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ":");
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "hotf" + FSC + "x/issue/1234";
+ String path = null;
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch.replaceAll("/", ":") + "/", link);
+ }
+
+ @Test
+ public void asLink_HttpUrlRepoBranchWithDefaultFscAndSlashPathFolderFileWithDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "|");
+ String baseUrl = "http://localhost";
+ String repository = "repo.git";
+ String branch = "some/feature" + FSC + "in/here";
+ String path = "large" + FSC + "stuff/folder/file" + FSC + "16";
+
+ String link = RawServlet.asLink(baseUrl, repository, branch, path);
+
+ assertNotNull(link);
+ assertEquals(baseUrl + Constants.RAW_PATH + repository + "/"
+ + branch.replaceAll("/", "|") + "/" + path.replaceAll("/", "|"), link);
+ }
+
+
+ @Test
+ public void getBranch_Repo()
+ {
+ String branch = rawServlet.getBranch("test.git", "test.git/");
+
+ assertEquals("Branch was supposed to be empty as no branch was given.", "", branch);
+ }
+
+ @Test
+ public void getBranch_PiNull()
+ {
+ String branch = rawServlet.getBranch("test.git", null);
+
+ assertEquals("Branch was supposed to be empty as path info is null.", "", branch);
+ }
+
+
+ @Test
+ public void getBranch_PiEmpty()
+ {
+ String branch = rawServlet.getBranch("test.git", "");
+
+ assertEquals("Branch was supposed to be empty as no path info exists.", "", branch);
+ }
+
+ @Test
+ public void getBranch_LeadinRepo()
+ {
+ String branch = rawServlet.getBranch("test.git", "some/test.git/");
+
+ assertEquals("Branch was supposed to be empty as no branch was given.", "", branch);
+ }
+
+ @Test
+ public void getBranch_ProjectRepo()
+ {
+ String branch = rawServlet.getBranch("smack/dab.git", "smack/dab.git/");
+
+ assertEquals("Branch was supposed to be empty as no branch was given.", "", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranch()
+ {
+ String branch = rawServlet.getBranch("test.git", "test.git/bee");
+
+ assertEquals("bee", branch);
+ }
+
+ @Test
+ public void getBranch_LeadinRepoBranch()
+ {
+ String branch = rawServlet.getBranch("repo.git", "project/repo.git/bae");
+
+ assertEquals("bae", branch);
+ }
+
+ @Test
+ public void getBranch_ProjectRepoBranch()
+ {
+ String branch = rawServlet.getBranch("test/r.git", "test/r.git/b");
+
+ assertEquals("b", branch);
+ }
+
+ @Test
+ public void getBranch_LeadinProjectRepoBranch()
+ {
+ String branch = rawServlet.getBranch("test/r.git", "a/b/test/r.git/b");
+
+ assertEquals("b", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchTrailingSlash()
+ {
+ String branch = rawServlet.getBranch("/test.git", "test.git/fixthis/");
+
+ assertEquals("fixthis", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchFile()
+ {
+ String branch = rawServlet.getBranch("/bob.git", "bob.git/branch/file.txt");
+
+ assertEquals("branch", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchFolderFile()
+ {
+ String branch = rawServlet.getBranch("/bill.git", "bill.git/flex/fold!laundr.y");
+
+ assertEquals("flex", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchFoldersTrailingSlash()
+ {
+ String branch = rawServlet.getBranch("bill.git", "bill.git/flex/fold!gold/");
+
+ assertEquals("flex", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchFoldersTrailingFsc()
+ {
+ String branch = rawServlet.getBranch("bill.git", "bill.git/flex/fold"+ FSC + "gold" + FSC);
+
+ assertEquals("flex", branch);
+ }
+
+ @Test
+ public void getBranch_LeadinProjectRepoBranchFoldersTrailingSlash()
+ {
+ String branch = rawServlet.getBranch("bam/bum.git", "bim/bam/bum.git/klingeling/dumm" + FSC + "di" + FSC + "dumm/");
+
+ assertEquals("klingeling", branch);
+ }
+
+ @Test
+ public void getBranch_LeadinProjectRepoBranchFoldersTrailingFsc()
+ {
+ String branch = rawServlet.getBranch("bam/bum.git", "bim/bam/bum.git/klingeling/dumm" + FSC + "di" + FSC + "dumm" + FSC);
+
+ assertEquals("klingeling", branch);
+ }
+
+ @Test
+ public void getBranch_RepoCommitid()
+ {
+ String branch = rawServlet.getBranch("git.git", "git.git/a02159e6378d63d0e1ad3c04a05462d9fc62fe89");
+
+ assertEquals("a02159e6378d63d0e1ad3c04a05462d9fc62fe89", branch);
+ }
+
+ @Test
+ public void getBranch_ProjectRepoCommitidFolderTrailingSlash()
+ {
+ String branch = rawServlet.getBranch("git/git.git", "git/git.git/a02159e6378d63d0e1ad3c04a05462d9fc62fe89/src/");
+
+ assertEquals("a02159e6378d63d0e1ad3c04a05462d9fc62fe89", branch);
+ }
+
+ @Test
+ public void getBranch_ProjectRepoCommitidFolderTrailingFsc()
+ {
+ String branch = rawServlet.getBranch("git/git.git", "git/git.git/a02159e6378d63d0e1ad3c04a05462d9fc62fe89/src" + FSC);
+
+ assertEquals("a02159e6378d63d0e1ad3c04a05462d9fc62fe89", branch);
+ }
+
+ @Test
+ public void getBranch_ProjectSubRepoCommitidFolderFile()
+ {
+ String branch = rawServlet.getBranch("git/git.git", "Git implementations/git/git.git/a02159e6378d63d0e1ad3c04a05462d9fc62fe89/src" + FSC + "README.md");
+
+ assertEquals("a02159e6378d63d0e1ad3c04a05462d9fc62fe89", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchWithFsc()
+ {
+ String branch = rawServlet.getBranch("git.git", "git.git/feature" + FSC + "rebase");
+
+ assertEquals("feature/rebase", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchWithTwoFsc()
+ {
+ String branch = rawServlet.getBranch("git.git", "git.git/feature" + FSC + "rebase" + FSC + "onto");
+
+ assertEquals("feature/rebase/onto", branch);
+ }
+
+ @Test
+ public void getBranch_ProjectRepoBranchWithTwoFsc()
+ {
+ String branch = rawServlet.getBranch("Java/git/git.git", "Java/git/git.git/feature" + FSC + "rebase" + FSC + "onto");
+
+ assertEquals("feature/rebase/onto", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchWithTwoFscTrailingSlash()
+ {
+ String branch = rawServlet.getBranch("git.git", "git.git/feature" + FSC + "rebase" + FSC + "onto/");
+
+ assertEquals("feature/rebase/onto", branch);
+ }
+
+ @Test
+ public void getBranch_ProjectRepoBranchWithTwoFscTrailingSlash()
+ {
+ String branch = rawServlet.getBranch("in Go/git.git", "in Go/git.git/feature" + FSC + "rebase" + FSC + "onto/");
+
+ assertEquals("feature/rebase/onto", branch);
+ }
+
+ @Test
+ public void getBranch_LeadinProjectRepoBranchWithTwoFscTrailingSlash()
+ {
+ String branch = rawServlet.getBranch("Go/git.git", "all the gits/Go/git.git/feature" + FSC + "rebase" + FSC + "onto/");
+
+ assertEquals("feature/rebase/onto", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchWithFscFolder()
+ {
+ String branch = rawServlet.getBranch("git.git", "git.git/feature" + FSC + "rebase/onto");
+
+ assertEquals("feature/rebase", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchWithFscFolderFile()
+ {
+ String branch = rawServlet.getBranch("git.git", "git.git/feature" + FSC + "rebase/onto" + FSC + "head");
+
+ assertEquals("feature/rebase", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchWithFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "|");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/some|feature");
+
+ assertEquals("some/feature", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchWithFsc_explicitFscSameAsDefault()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, FSC);
+
+ String branch = rawServlet.getBranch("git.git", "git.git/some" + FSC + "feature");
+
+ assertEquals("some/feature", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchWithFscFolders_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ":");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/hotfix:1.2.3/src:main:java/");
+
+ assertEquals("hotfix/1.2.3", branch);
+ }
+
+ @Test
+ public void getBranch_LeadindRepoBranchWithFscFolderFile_explicitFscSameAsDefault()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, FSC);
+
+ String branch = rawServlet.getBranch("git.git", "IBM/git.git/some" + FSC + "feature/some" + FSC + "folder" + FSC + "file.dot");
+
+ assertEquals("some/feature", branch);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getBranch_RepoBranchWithDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ";");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/some" + FSC + "feature");
+
+ assertEquals("some" + FSC + "feature", branch);
+ }
+
+ @Test
+ public void getBranch_RepoBranchWithDifferentFscFolderFileWithDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ";");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/some;feature/path" + FSC + "to" + FSC + "file.txt");
+
+ assertEquals("some/feature", branch);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getBranch_RepoBranchWithDefaultFscAndDifferentFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ":");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/go" + FSC + "to:start");
+
+ assertEquals("go" + FSC + "to/start", branch);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getBranch_RepoBranchWithDefaultFscAndDifferentFscFolderWithDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/go" + FSC + "to+prison/dont" + FSC + "collect");
+
+ assertEquals("go" + FSC + "to/prison", branch);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getBranch_RepoBranchWithDefaultFscAndDifferentFscFolderWithDefaultFscTrailingSlash_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/go" + FSC + "to+ prison/dont" + FSC + "collect/");
+
+ assertEquals("go" + FSC + "to/prison", branch);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getBranch_RepoBranchWithDefaultFscAndDifferentFscFolderWithDefaultFscTrailingFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/go" + FSC + "to+prison/dont" + FSC + "collect+");
+
+ assertEquals("go" + FSC + "to/prison", branch);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getBranch_RepoBranchWithDefaultFscAndDifferentFscFolderWithDefaultFscTrailingDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/go" + FSC + "to+prison/dont" + FSC + "collect" + FSC);
+
+ assertEquals("go" + FSC + "to/prison", branch);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getBranch_RepoBranchWithDefaultFscAndDifferentFscFolderFileWithDefaultFscAndDifferentFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String branch = rawServlet.getBranch("git.git", "git.git/go" + FSC + "to+prison/dont" + FSC + "collect+money.eur");
+
+ assertEquals("go" + FSC + "to/prison", branch);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getBranch_LeadinProjectRepoBranchWithDefaultFscAndDifferentFscFolderFileWithDefaultFscAndDifferentFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String branch = rawServlet.getBranch("games/Monopoly/git.git", "blah/games/Monopoly/git.git/go" + FSC + "to+prison/dont" + FSC + "collect+money.eur");
+
+ assertEquals("go" + FSC + "to/prison", branch);
+ }
+
+
+
+
+
+
+
+
+ @Test
+ public void getPath_Repo()
+ {
+ String path = rawServlet.getPath("test.git", "", "test.git/");
+
+ assertEquals("Path was supposed to be empty as no path was given.", "", path);
+ }
+
+ @Test
+ public void getPath_PiNull()
+ {
+ String path = rawServlet.getPath("test.git", "", null);
+
+ assertEquals("Path was supposed to be empty as path info is null.", "", path);
+ }
+
+
+ @Test
+ public void getPath_PiEmpty()
+ {
+ String path = rawServlet.getPath("test.git", "", "");
+
+ assertEquals("Path was supposed to be empty as no path info exists.", "", path);
+ }
+
+ @Test
+ public void getPath_LeadinRepo()
+ {
+ String path = rawServlet.getPath("test.git", "", "some/test.git/");
+
+ assertEquals("Path was supposed to be empty as no path was given.", "", path);
+ }
+
+ @Test
+ public void getPath_ProjectRepo()
+ {
+ String path = rawServlet.getPath("smack/dab.git", "", "smack/dab.git/");
+
+ assertEquals("Path was supposed to be empty as no path was given.", "", path);
+ }
+
+ @Test
+ public void getPath_RepoBranch()
+ {
+ String path = rawServlet.getPath("test.git", "bee", "test.git/bee");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_LeadinRepoBranch()
+ {
+ String path = rawServlet.getPath("repo.git", "bae", "project/repo.git/bae");
+
+ assertEquals("Expected path to be empty since no path was present","" , path);
+ }
+
+ @Test
+ public void getPath_ProjectRepoBranch()
+ {
+ String path = rawServlet.getPath("test/r.git", "b", "test/r.git/b");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_LeadinProjectRepoBranch()
+ {
+ String path = rawServlet.getPath("test/r.git", "b", "a/b/test/r.git/b");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchTrailingSlash()
+ {
+ String path = rawServlet.getPath("test.git", "fixthis", "test.git/fixthis/");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchFile()
+ {
+ String path = rawServlet.getPath("/bob.git", "branch", "bob.git/branch/file.txt");
+
+ assertEquals("file.txt", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchFolderFile()
+ {
+ String path = rawServlet.getPath("/bill.git", "flex", "bill.git/flex/fold" + FSC + "laundr.y");
+
+ assertEquals("fold/laundr.y", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchFoldersTrailingSlash()
+ {
+ String path = rawServlet.getPath("bill.git", "flex", "bill.git/flex/fold"+ FSC + "gold/");
+
+ assertEquals("fold/gold", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchFoldersTrailingFsc()
+ {
+ String path = rawServlet.getPath("bill.git", "flex", "bill.git/flex/fold"+ FSC + "gold" + FSC);
+
+ assertEquals("fold/gold", path);
+ }
+
+ @Test
+ public void getPath_LeadinProjectRepoBranchFoldersTrailingSlash()
+ {
+ String path = rawServlet.getPath("bam/bum.git", "klingeling", "bim/bam/bum.git/klingeling/dumm" + FSC + "di" + FSC + "dumm/");
+
+ assertEquals("dumm/di/dumm", path);
+ }
+
+ @Test
+ public void getPath_LeadinProjectRepoBranchFoldersTrailingFsc()
+ {
+ String path = rawServlet.getPath("bam/bum.git", "klingeling", "bim/bam/bum.git/klingeling/dumm" + FSC + "di" + FSC + "dumm" + FSC);
+
+ assertEquals("dumm/di/dumm", path);
+ }
+
+ @Test
+ public void getPath_RepoCommitid()
+ {
+ String path = rawServlet.getPath("/git.git", "a02159e6378d63d0e1ad3c04a05462d9fc62fe89", "git.git/a02159e6378d63d0e1ad3c04a05462d9fc62fe89/");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_RepoCommitidNoTrailingSlash()
+ {
+ String path = rawServlet.getPath("/git.git", "a02159e6378d63d0e1ad3c04a05462d9fc62fe89", "git.git/a02159e6378d63d0e1ad3c04a05462d9fc62fe89");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_ProjectRepoCommitidFolderTrailingSlash()
+ {
+ String path = rawServlet.getPath("git/git.git", "a02159e6378d63d0e1ad3c04a05462d9fc62fe89", "git/git.git/a02159e6378d63d0e1ad3c04a05462d9fc62fe89/src/");
+
+ assertEquals("src", path);
+ }
+
+ @Test
+ public void getPath_ProjectRepoCommitidFolderTrailingFsc()
+ {
+ String path = rawServlet.getPath("git/git.git", "a02159e6378d63d0e1ad3c04a05462d9fc62fe89", "git/git.git/a02159e6378d63d0e1ad3c04a05462d9fc62fe89/src" + FSC);
+
+ assertEquals("src", path);
+ }
+
+ @Test
+ public void getPath_ProjectSubRepoCommitidFolderFile()
+ {
+ String path = rawServlet.getPath("git/git.git", "a02159e6378d63d0e1ad3c04a05462d9fc62fe89", "Git implementations/git/git.git/a02159e6378d63d0e1ad3c04a05462d9fc62fe89/src" + FSC + "README.md");
+
+ assertEquals("src/README.md", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithFsc()
+ {
+ String path = rawServlet.getPath("git.git", "feature/rebase", "git.git/feature" + FSC + "rebase");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithTwoFsc()
+ {
+ String path = rawServlet.getPath("git.git", "feature/rebase/onto", "git.git/feature" + FSC + "rebase" + FSC + "onto");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_ProjectRepoBranchWithTwoFsc()
+ {
+ String path = rawServlet.getPath("Java/git/git.git", "feature/rebase/onto", "Java/git/git.git/feature" + FSC + "rebase" + FSC + "onto");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithTwoFscTrailingSlash()
+ {
+ String path = rawServlet.getPath("git.git", "feature/rebase/onto", "git.git/feature" + FSC + "rebase" + FSC + "onto/");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_ProjectRepoBranchWithTwoFscTrailingSlash()
+ {
+ String path = rawServlet.getPath("in Go/git.git", "feature/rebase/onto", "in Go/git.git/feature" + FSC + "rebase" + FSC + "onto/");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_LeadinProjectRepoBranchWithTwoFscTrailingSlash()
+ {
+ String path = rawServlet.getPath("Go/git.git", "feature/rebase/onto", "all the gits/Go/git.git/feature" + FSC + "rebase" + FSC + "onto/");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithFscFolder()
+ {
+ String path = rawServlet.getPath("git.git", "feature/rebase", "git.git/feature" + FSC + "rebase/onto");
+
+ assertEquals("onto", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithFscFolderFile()
+ {
+ String path = rawServlet.getPath("git.git", "feature/rebase", "git.git/feature" + FSC + "rebase/onto" + FSC + "head");
+
+ assertEquals("onto/head", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "|");
+
+ String path = rawServlet.getPath("git.git", "some/feature", "git.git/some|feature");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithFsc_explicitFscSameAsDefault()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, String.valueOf(FSC));
+
+ String path = rawServlet.getPath("git.git", "some/feature", "git.git/some" + FSC + "feature");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithFscFoldersTrailingSlash_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ":");
+
+ String path = rawServlet.getPath("git.git", "hotfix/1.2.3", "git.git/hotfix:1.2.3/src:main:java/");
+
+ assertEquals("src/main/java", path);
+ }
+
+ @Test
+ public void getPath_LeadindRepoBranchWithFscFolderFile_explicitFscSameAsDefault()
+ {
+ 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");
+
+ assertEquals("some/folder/file.dot", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ";");
+
+ String path = rawServlet.getPath("git.git", "some" + FSC + "feature", "git.git/some" + FSC + "feature");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+
+ @Test
+ public void getPath_RepoBranchWithDefaultFscTrailingSlash_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ";");
+
+ String path = rawServlet.getPath("git.git", "some" + FSC + "feature", "git.git/some" + FSC + "feature/");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getPath_RepoBranchWithDifferentFscFolderFileWithDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ";");
+
+ String path = rawServlet.getPath("git.git", "some/feature", "git.git/some;feature/path" + FSC + "to" + FSC + "file.txt");
+
+ assertEquals("path" + FSC + "to" + FSC + "file.txt", path);
+ }
+
+ @Test
+ public void getPath_RepoBranchWithDefaultFscAndDifferentFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, ":");
+
+ String path = rawServlet.getPath("git.git", "go" + FSC + "to/start", "git.git/go" + FSC + "to:start");
+
+ assertEquals("Expected returned path to be empty since no path was present", "", path);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getPath_RepoBranchWithDefaultFscAndDifferentFscFolderWithDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String path = rawServlet.getPath("git.git", "go" + FSC + "to/prison", "git.git/go" + FSC + "to+prison/dont" + FSC + "collect");
+
+ assertEquals("dont" + FSC + "collect", path);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getPath_RepoBranchWithDefaultFscAndDifferentFscFolderWithDefaultFscTrailingSlash_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String path = rawServlet.getPath("git.git", "go" + FSC + "to/prison", "git.git/go" + FSC + "to+prison/dont" + FSC + "collect/");
+
+ assertEquals("dont" + FSC + "collect", path);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getPath_RepoBranchWithDefaultFscAndDifferentFscFolderWithDefaultFscTrailingFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String path = rawServlet.getPath("git.git", "go" + FSC + "to/prison", "git.git/go" + FSC + "to+prison/dont" + FSC + "collect+");
+
+ assertEquals("dont" + FSC + "collect", path);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getPath_RepoBranchWithDefaultFscAndDifferentFscFolderWithDefaultFscTrailingDefaultFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String path = rawServlet.getPath("git.git", "go" + FSC + "to/prison", "git.git/go" + FSC + "to+prison/dont" + FSC + "collect" + FSC);
+
+ assertEquals("dont" + FSC + "collect" + FSC, path);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getPath_RepoBranchWithDefaultFscAndDifferentFscFolderFileWithDefaultFscAndDifferentFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String path = rawServlet.getPath("git.git", "go" + FSC + "to/prison", "git.git/go" + FSC + "to+prison/" + FSC + "dont" + FSC + "collect+money.eur");
+
+ assertEquals(FSC + "dont" + FSC + "collect/money.eur", path);
+ }
+
+ @Ignore // TODO: Why was it implemented this way?
+ @Test
+ public void getPath_LeadinProjectRepoBranchWithDefaultFscAndDifferentFscFolderFileWithDefaultFscAndDifferentFsc_differentFsc()
+ {
+ settings.overrideSetting(Keys.web.forwardSlashCharacter, "+");
+
+ String path = rawServlet.getPath("games/Monopoly/git.git", "go" + FSC + "to/prison", "blah/games/Monopoly/git.git/go" + FSC + "to+prison/dont" + FSC + "collect+money.eur");
+
+ assertEquals("dont" + FSC + "collect/money.eur", path);
+ }
+}
diff --git a/src/test/java/com/gitblit/tests/mock/MockGitblitContext.java b/src/test/java/com/gitblit/tests/mock/MockGitblitContext.java
new file mode 100644
index 00000000..e51d7b85
--- /dev/null
+++ b/src/test/java/com/gitblit/tests/mock/MockGitblitContext.java
@@ -0,0 +1,12 @@
+package com.gitblit.tests.mock;
+
+import com.gitblit.manager.IManager;
+import com.gitblit.servlet.GitblitContext;
+
+public class MockGitblitContext extends GitblitContext
+{
+ public <X extends IManager> void addManager(X x)
+ {
+ startManager(x);
+ }
+}