diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java index 048526ee8..688de2c49 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Log.java @@ -267,6 +267,7 @@ protected void show(final RevCommit c) throws Exception { outw.print(s); outw.println(); } + c.disposeBody(); outw.println(); if (showNotes(c)) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java index 37f1d7b8d..c23e4e328 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java @@ -609,7 +609,19 @@ public void reset() { inDegree = 0; } - final void disposeBody() { + /** + * Discard the message buffer to reduce memory usage. + *

+ * After discarding the memory usage of the {@code RevCommit} is reduced to + * only the {@link #getTree()} and {@link #getParents()} pointers and the + * time in {@link #getCommitTime()}. Accessing other properties such as + * {@link #getAuthorIdent()}, {@link #getCommitterIdent()} or either message + * function requires reloading the buffer by invoking + * {@link RevWalk#parseBody(RevObject)}. + * + * @since 4.0 + */ + public final void disposeBody() { buffer = null; } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java index 75201164c..bf2785e0d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java @@ -270,7 +270,18 @@ public final String getTagName() { return tagName; } - final void disposeBody() { + /** + * Discard the message buffer to reduce memory usage. + *

+ * After discarding the memory usage of the {@code RevTag} is reduced to + * only the {@link #getObject()} pointer and {@link #getTagName()}. + * Accessing other properties such as {@link #getTaggerIdent()} or either + * message function requires reloading the buffer by invoking + * {@link RevWalk#parseBody(RevObject)}. + * + * @since 4.0 + */ + public final void disposeBody() { buffer = null; } }