From cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef Mon Sep 17 00:00:00 2001 From: James Moger Date: Thu, 5 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 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(); + } } -- 2.39.5