summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/gitblit/GitServlet.java4
-rw-r--r--tests/com/gitblit/tests/GitServletTest.java32
2 files changed, 33 insertions, 3 deletions
diff --git a/src/com/gitblit/GitServlet.java b/src/com/gitblit/GitServlet.java
index 967efac6..3b60e9f1 100644
--- a/src/com/gitblit/GitServlet.java
+++ b/src/com/gitblit/GitServlet.java
@@ -208,8 +208,8 @@ public class GitServlet extends org.eclipse.jgit.http.server.GitServlet {
protected RepositoryModel getRepositoryModel(ReceivePack rp) {
Repository repository = rp.getRepository();
String rootPath = GitBlit.getRepositoriesFolder().getAbsolutePath();
- String repositoryName = repository.getDirectory().getAbsolutePath();
- repositoryName = repositoryName.substring(rootPath.length() + 1);
+ String repositoryName = StringUtils.getRelativePath(rootPath, repository.getDirectory()
+ .getAbsolutePath());
RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName);
return model;
}
diff --git a/tests/com/gitblit/tests/GitServletTest.java b/tests/com/gitblit/tests/GitServletTest.java
index f0aedce1..a4c5e882 100644
--- a/tests/com/gitblit/tests/GitServletTest.java
+++ b/tests/com/gitblit/tests/GitServletTest.java
@@ -26,6 +26,8 @@ import com.gitblit.models.RepositoryModel;
public class GitServletTest {
File folder = new File(GitBlitSuite.REPOSITORIES, "working/ticgit");
+
+ File jgitFolder = new File(GitBlitSuite.REPOSITORIES, "working/jgit");
String url = GitBlitSuite.url;
String account = GitBlitSuite.account;
@@ -94,7 +96,7 @@ public class GitServletTest {
}
@Test
- public void testAnonymousCommit() throws Exception {
+ public void testAnonymousPush() throws Exception {
Git git = Git.open(folder);
File file = new File(folder, "TODO");
for (int i = 0; i < 3; i++) {
@@ -108,4 +110,32 @@ public class GitServletTest {
git.push().setPushAll().call();
git.getRepository().close();
}
+
+ @Test
+ public void testSubfolderPush() throws Exception {
+ if (jgitFolder.exists()) {
+ FileUtils.delete(jgitFolder, FileUtils.RECURSIVE);
+ }
+ CloneCommand clone = Git.cloneRepository();
+ clone.setURI(MessageFormat.format("{0}/git/test/jgit.git", url));
+ clone.setDirectory(jgitFolder);
+ clone.setBare(false);
+ clone.setCloneAllBranches(true);
+ clone.setCredentialsProvider(new UsernamePasswordCredentialsProvider(account, password));
+ clone.call();
+ assertTrue(true);
+
+ Git git = Git.open(jgitFolder);
+ File file = new File(jgitFolder, "TODO");
+ for (int i = 0; i < 3; i++) {
+ OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(file, true));
+ BufferedWriter w = new BufferedWriter(os);
+ w.write("// " + new Date().toString() + "\n");
+ w.close();
+ git.add().addFilepattern(file.getName()).call();
+ git.commit().setMessage("test commit #" + (i + 1)).call();
+ }
+ git.push().setPushAll().call();
+ git.getRepository().close();
+ }
}