diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java index 1dbdc98ce..4ce422ca9 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java @@ -166,6 +166,8 @@ public class RevWalk implements Iterable, AutoCloseable { final ObjectReader reader; + private final boolean closeReader; + final MutableObjectId idBuffer; ObjectIdOwnerMap objects; @@ -175,6 +177,7 @@ public class RevWalk implements Iterable, AutoCloseable { private int delayFreeFlags; private int retainOnReset; + int carryFlags = UNINTERESTING; final ArrayList roots; @@ -200,22 +203,27 @@ public class RevWalk implements Iterable, 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. + *

* * @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(); @@ -226,6 +234,7 @@ public RevWalk(ObjectReader or) { 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 void release() { */ @Override public void close() { - reader.close(); + if (closeReader) { + reader.close(); + } } /**