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>
stable-5.3
Jackson Toeniskoetter 6 years ago
parent
commit
8ed59c511c
  1. 19
      org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java

19
org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java

@ -112,7 +112,7 @@ import org.eclipse.jgit.util.FileUtils;
* @param <R> * @param <R>
* type of Repository the test data is stored on. * 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> */ /** Constant <code>AUTHOR="J. Author"</code> */
public static final String AUTHOR = "J. Author"; 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 { private static void prunePacked(ObjectDirectory odb) throws IOException {
for (PackFile p : odb.getPacks()) { for (PackFile p : odb.getPacks()) {
for (MutableEntry e : p) for (MutableEntry e : p)

Loading…
Cancel
Save