Browse Source

RevWalk: Do not close reader passed explicitly to constructor

The RevWalk(ObjectReader) constructor is explicitly to handle the case
where the caller is responsible for opening and closing the reader.
The reader should only be closed when it was created in the
RevWalk(Repository) constructor.

Change-Id: Ic0d595dc8d10de79e87549546c6c5ea2dc617e9b
stable-4.0
Dave Borowitz 10 years ago
parent
commit
1e694f3847
  1. 25
      org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java

25
org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java

@ -166,6 +166,8 @@ public class RevWalk implements Iterable<RevCommit>, AutoCloseable {
final ObjectReader reader;
private final boolean closeReader;
final MutableObjectId idBuffer;
ObjectIdOwnerMap<RevObject> objects;
@ -175,6 +177,7 @@ public class RevWalk implements Iterable<RevCommit>, AutoCloseable {
private int delayFreeFlags;
private int retainOnReset;
int carryFlags = UNINTERESTING;
final ArrayList<RevCommit> roots;
@ -200,22 +203,27 @@ public class RevWalk implements Iterable<RevCommit>, AutoCloseable {
*
* @param repo
* the repository the walker will obtain data from. An
* ObjectReader will be created by the walker, and must be
* released by the caller.
* ObjectReader will be created by the walker, and will be closed
* when the walker is closed.
*/
public RevWalk(final Repository repo) {
this(repo.newObjectReader());
this(repo.newObjectReader(), true);
}
/**
* Create a new revision walker for a given repository.
* <p>
*
* @param or
* the reader the walker will obtain data from. The reader should
* be released by the caller when the walker is no longer
* required.
* the reader the walker will obtain data from. The reader is not
* closed when the walker is closed (but is closed by {@link
* #dispose()}.
*/
public RevWalk(ObjectReader or) {
this(or, false);
}
private RevWalk(ObjectReader or, boolean closeReader) {
reader = or;
idBuffer = new MutableObjectId();
objects = new ObjectIdOwnerMap<RevObject>();
@ -226,6 +234,7 @@ public class RevWalk implements Iterable<RevCommit>, AutoCloseable {
filter = RevFilter.ALL;
treeFilter = TreeFilter.ALL;
retainBody = true;
this.closeReader = closeReader;
}
/** @return the reader this walker is using to load objects. */
@ -254,7 +263,9 @@ public class RevWalk implements Iterable<RevCommit>, AutoCloseable {
*/
@Override
public void close() {
reader.close();
if (closeReader) {
reader.close();
}
}
/**

Loading…
Cancel
Save