Browse Source

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>
tags/v5.3.0.201901161700-m1
Jackson Toeniskoetter 5 years ago
parent
commit
8ed59c511c

+ 18
- 1
org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java View File

@@ -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)

Loading…
Cancel
Save