From 9effe1630d97039b3e01cd9b58ed07e75be1d63c Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 25 Feb 2013 08:40:30 -0500
Subject: [PATCH] Merge pull request #75 from thefake/master

---
 tests/com/gitblit/tests/GitBlitSuite.java |   50 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 45 insertions(+), 5 deletions(-)

diff --git a/tests/com/gitblit/tests/GitBlitSuite.java b/tests/com/gitblit/tests/GitBlitSuite.java
index 07c5e08..b0179c3 100644
--- a/tests/com/gitblit/tests/GitBlitSuite.java
+++ b/tests/com/gitblit/tests/GitBlitSuite.java
@@ -16,11 +16,17 @@
 package com.gitblit.tests;
 
 import java.io.File;
+import java.lang.reflect.Field;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 
+import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.RepositoryCache;
+import org.eclipse.jgit.lib.RepositoryCache.FileKey;
 import org.eclipse.jgit.storage.file.FileRepository;
+import org.eclipse.jgit.util.FS;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.runner.RunWith;
@@ -49,14 +55,15 @@
 @RunWith(Suite.class)
 @SuiteClasses({ ArrayUtilsTest.class, FileUtilsTest.class, TimeUtilsTest.class,
 		StringUtilsTest.class, Base64Test.class, JsonUtilsTest.class, ByteFormatTest.class,
-		ObjectCacheTest.class, UserServiceTest.class, LdapUserServiceTest.class,
+		ObjectCacheTest.class, PermissionsTest.class, UserServiceTest.class, LdapUserServiceTest.class,
 		MarkdownUtilsTest.class, JGitUtilsTest.class, SyndicationUtilsTest.class,
-		DiffUtilsTest.class, MetricUtilsTest.class, TicgitUtilsTest.class,
+		DiffUtilsTest.class, MetricUtilsTest.class, TicgitUtilsTest.class, X509UtilsTest.class,
 		GitBlitTest.class, FederationTests.class, RpcTests.class, GitServletTest.class,
-		GroovyScriptTest.class, LuceneExecutorTest.class, IssuesTest.class, RepositoryModelTest.class })
+		GroovyScriptTest.class, LuceneExecutorTest.class, IssuesTest.class, RepositoryModelTest.class,
+		FanoutServiceTest.class })
 public class GitBlitSuite {
 
-	public static final File REPOSITORIES = new File("git");
+	public static final File REPOSITORIES = new File("data/git");
 
 	static int port = 8280;
 	static int shutdownPort = 8281;
@@ -110,7 +117,8 @@
 				GitBlitServer.main("--httpPort", "" + port, "--httpsPort", "0", "--shutdownPort",
 						"" + shutdownPort, "--repositoriesFolder",
 						"\"" + GitBlitSuite.REPOSITORIES.getAbsolutePath() + "\"", "--userService",
-						"test-users.conf", "--settings", "test-gitblit.properties");
+						"test-users.conf", "--settings", "test-gitblit.properties",
+						"--baseFolder", "data");
 			}
 		});
 
@@ -189,4 +197,36 @@
 			g.printStackTrace();
 		}
 	}
+	
+	public static void close(File repository) {
+		try {
+			File gitDir = FileKey.resolve(repository, FS.detect());
+			if (gitDir != null && gitDir.exists()) {
+				close(RepositoryCache.open(FileKey.exact(gitDir, FS.detect())));
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public static void close(Git git) {
+		close(git.getRepository());
+	}
+	
+	public static void close(Repository r) {
+		RepositoryCache.close(r);
+
+		// assume 2 uses in case reflection fails
+		int uses = 2;
+		try {
+			Field useCnt = Repository.class.getDeclaredField("useCnt");
+			useCnt.setAccessible(true);
+			uses = ((AtomicInteger) useCnt.get(r)).get();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		for (int i = 0; i < uses; i++) {
+			r.close();
+		}
+	}
 }

--
Gitblit v1.9.1