summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.junit/src
diff options
context:
space:
mode:
authorJackson Toeniskoetter <jackdt@google.com>2019-01-10 11:51:29 -0800
committerJackson Toeniskoetter <jackdt@google.com>2019-01-10 12:10:43 -0800
commit8ed59c511cf61a23393fabf252a315371a1438f0 (patch)
tree5b61f5eb24fa340a2d8661ae497973d8bc0b8c07 /org.eclipse.jgit.junit/src
parent23c30c6310686392dbbff4385b96a3403e09168a (diff)
downloadjgit-8ed59c511cf61a23393fabf252a315371a1438f0.tar.gz
jgit-8ed59c511cf61a23393fabf252a315371a1438f0.zip
Make TestRepository AutoCloseable
Currently, unit tests need to either close the Repository underlying a TestRepository manually, or not close it at all. Both are error prone. The TestRepository holds a reference to 4 AutoCloseable objects: Repository, ObjectInserter, Git, and RevWalk. The last two can escape the TestRepository scope, so they are not closed when TestRepository is closed. Change-Id: I4461bb9104d517bd6bef09c38507c7c2ef5c31d4 Signed-off-by: Jackson Toeniskoetter <jackdt@google.com>
Diffstat (limited to 'org.eclipse.jgit.junit/src')
-rw-r--r--org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java19
1 files changed, 18 insertions, 1 deletions
diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java
index c9fa2f506c..55a7766f60 100644
--- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java
+++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java
@@ -112,7 +112,7 @@ import org.eclipse.jgit.util.FileUtils;
* @param <R>
* type of Repository the test data is stored on.
*/
-public class TestRepository<R extends Repository> {
+public class TestRepository<R extends Repository> implements AutoCloseable {
/** Constant <code>AUTHOR="J. Author"</code> */
public static final String AUTHOR = "J. Author";
@@ -933,6 +933,23 @@ public class TestRepository<R extends Repository> {
}
}
+ /**
+ * Closes the underlying {@link Repository} object and any other internal
+ * resources.
+ * <p>
+ * {@link AutoCloseable} resources that may escape this object, such as
+ * those returned by the {@link #git} and {@link #getRevWalk()} methods are
+ * not closed.
+ */
+ @Override
+ public void close() {
+ try {
+ inserter.close();
+ } finally {
+ db.close();
+ }
+ }
+
private static void prunePacked(ObjectDirectory odb) throws IOException {
for (PackFile p : odb.getPacks()) {
for (MutableEntry e : p)