diff --git a/org.eclipse.jgit.benchmarks/pom.xml b/org.eclipse.jgit.benchmarks/pom.xml
index 16a1f00e9..02cfe56d8 100644
--- a/org.eclipse.jgit.benchmarks/pom.xml
+++ b/org.eclipse.jgit.benchmarks/pom.xml
@@ -175,12 +175,12 @@
org.apache.maven.plugins
maven-site-plugin
- 4.0.0-M4
+ 3.12.1
org.apache.maven.wagon
- wagon-ssh
- 3.5.2
+ wagon-ssh-external
+ 3.5.3
diff --git a/org.eclipse.jgit.packaging/pom.xml b/org.eclipse.jgit.packaging/pom.xml
index 1f5d1a138..eae714587 100644
--- a/org.eclipse.jgit.packaging/pom.xml
+++ b/org.eclipse.jgit.packaging/pom.xml
@@ -313,7 +313,7 @@
org.apache.maven.plugins
maven-site-plugin
- 3.9.1
+ 3.12.1
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkCommitGraphTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkCommitGraphTest.java
index 6c8014513..97d3f81b9 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkCommitGraphTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkCommitGraphTest.java
@@ -83,6 +83,42 @@ public void testParseHeaders() throws Exception {
assertArrayEquals(notParseInGraph.getParents(), noBody.getParents());
}
+ @Test
+ public void testParseCanonical() throws Exception {
+ RevCommit c1 = commitFile("file1", "1", "master");
+ enableAndWriteCommitGraph();
+
+ RevCommit notParseInGraph = rw.lookupCommit(c1);
+ rw.parseHeaders(notParseInGraph);
+
+ reinitializeRevWalk();
+ RevCommit parseInGraph = rw.lookupCommit(c1);
+ parseInGraph.parseCanonical(rw, rw.getCachedBytes(c1));
+
+ assertTrue(parseInGraph instanceof RevCommitCG);
+ assertNotNull(parseInGraph.getRawBuffer());
+ assertEquals(1, parseInGraph.getGeneration());
+ assertEquals(notParseInGraph.getId(), parseInGraph.getId());
+ assertEquals(notParseInGraph.getTree(), parseInGraph.getTree());
+ assertEquals(notParseInGraph.getCommitTime(),
+ parseInGraph.getCommitTime());
+ assertArrayEquals(notParseInGraph.getParents(),
+ parseInGraph.getParents());
+
+ reinitializeRevWalk();
+ rw.setRetainBody(false);
+ RevCommit noBody = rw.lookupCommit(c1);
+ noBody.parseCanonical(rw, rw.getCachedBytes(c1));
+
+ assertTrue(noBody instanceof RevCommitCG);
+ assertNull(noBody.getRawBuffer());
+ assertEquals(1, noBody.getGeneration());
+ assertEquals(notParseInGraph.getId(), noBody.getId());
+ assertEquals(notParseInGraph.getTree(), noBody.getTree());
+ assertEquals(notParseInGraph.getCommitTime(), noBody.getCommitTime());
+ assertArrayEquals(notParseInGraph.getParents(), noBody.getParents());
+ }
+
@Test
public void testInitializeShallowCommits() throws Exception {
RevCommit c1 = commit(commit());
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 e155a2563..b64c9ce90 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
@@ -125,7 +125,15 @@ public static RevCommit parse(RevWalk rw, byte[] raw) throws IOException {
int inDegree;
- private byte[] buffer;
+ /**
+ * Raw unparsed commit body of the commit. Populated only
+ * after {@link #parseCanonical(RevWalk, byte[])} with
+ * {@link RevWalk#isRetainBody()} enable or after
+ * {@link #parseBody(RevWalk)} and {@link #parse(RevWalk, byte[])}.
+ *
+ * @since 6.5.1
+ */
+ protected byte[] buffer;
/**
* Create a new commit reference.
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommitCG.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommitCG.java
index b68f65b68..4d3664da1 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommitCG.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommitCG.java
@@ -44,10 +44,27 @@ protected RevCommitCG(AnyObjectId id, int graphPosition) {
this.graphPosition = graphPosition;
}
+ /** {@inheritDoc} */
+ @Override
+ void parseCanonical(RevWalk walk, byte[] raw) throws IOException {
+ if (walk.isRetainBody()) {
+ buffer = raw;
+ }
+ parseInGraph(walk);
+ }
+
/** {@inheritDoc} */
@Override
void parseHeaders(RevWalk walk) throws MissingObjectException,
IncorrectObjectTypeException, IOException {
+ if (walk.isRetainBody()) {
+ super.parseBody(walk); // This parses header and body
+ return;
+ }
+ parseInGraph(walk);
+ }
+
+ private void parseInGraph(RevWalk walk) throws IOException {
CommitGraph graph = walk.commitGraph();
CommitGraph.CommitData data = graph.getCommitData(graphPosition);
if (data == null) {
@@ -78,11 +95,7 @@ void parseHeaders(RevWalk walk) throws MissingObjectException,
this.parents = pList;
}
}
-
flags |= PARSED;
- if (walk.isRetainBody()) {
- super.parseBody(walk);
- }
}
/** {@inheritDoc} */
diff --git a/pom.xml b/pom.xml
index 0d625fbe1..e4f7cc623 100644
--- a/pom.xml
+++ b/pom.xml
@@ -344,12 +344,12 @@
org.apache.maven.plugins
maven-site-plugin
- 4.0.0-M4
+ 3.12.1
org.apache.maven.wagon
- wagon-ssh
- 3.5.2
+ wagon-ssh-external
+ 3.5.3