RevWalk: Discard uninteresting commits unless RevSort.BOUNDARY

Previously using an ObjectWalk meant uninteresting commits may keep
their commit message buffers in memory just in case they were found to
be on the boundary and were output as UNINTERESTING for the caller.

This was incorrect inside StartGenerator. ObjectWalk hides these
internal UNINTERESTING cases from its caller unless RevSort.BOUNDARY
was explicitly set, and its false by default. Callers never see one
of these saved uninteresting commits.

Change the test to allow early dispose unless the application has
explicitly asked for RevSort.BOUNDARY. This allows uninteresting
commit buffers to be discarded and garbage collected in ObjectWalks
when the caller will never be given the RevCommit.

Change-Id: Ic1419cc1d9ee95f4d09386dd0730d54c12dcc157
This commit is contained in:
Shawn Pearce 2015-05-08 22:48:10 -07:00
parent 53e39094bf
commit af7dcd6e1b
1 changed files with 1 additions and 1 deletions

View File

@ -144,7 +144,7 @@ RevCommit next() throws MissingObjectException,
} else {
g = new PendingGenerator(w, pending, rf, pendingOutputType);
if (boundary) {
if (walker.hasRevSort(RevSort.BOUNDARY)) {
// Because the boundary generator may produce uninteresting
// commits we cannot allow the pending generator to dispose
// of them early.