From cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 05 Jan 2012 17:34:05 -0500
Subject: [PATCH] Fixed bug in receive hook for repositories in subfolders

---
 src/com/gitblit/GitServlet.java             |    4 ++--
 tests/com/gitblit/tests/GitServletTest.java |   32 +++++++++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/src/com/gitblit/GitServlet.java b/src/com/gitblit/GitServlet.java
index 967efac..3b60e9f 100644
--- a/src/com/gitblit/GitServlet.java
+++ b/src/com/gitblit/GitServlet.java
@@ -208,8 +208,8 @@
 		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 f0aedce..a4c5e88 100644
--- a/tests/com/gitblit/tests/GitServletTest.java
+++ b/tests/com/gitblit/tests/GitServletTest.java
@@ -26,6 +26,8 @@
 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 @@
 	}
 
 	@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 @@
 		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();
+	}
 }

--
Gitblit v1.9.1