ReceivePack: Add option to retain PackParser's object IDs

We need more control over inputs to the ConnectivityChecker, so
add public getter/setter for retaining parsed object IDs.

It would be cleaner if we could use ConnectivityCheckInfo to
manage checker-related config, but currently that object is only
created immediately before running the checker, which is after
the PackParser has run.

For now this change should let us redeploy TreeWalkConnectivityChecker
and get some data.

Change-Id: I9ae0e2b16f0caa8e67a1b57b58c3984e2fa8775f
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
index ec7d4c1..c0ff5bf 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
@@ -222,6 +222,8 @@ public class ReceivePack {
 
 	private boolean checkReferencedAreReachable;
 
+	private boolean retainParsedObjectIDs;
+
 	/** Git object size limit */
 	private long maxObjectSizeLimit;
 
@@ -501,6 +503,27 @@ public void setCheckReferencedObjectsAreReachable(boolean b) {
 	}
 
 	/**
+	 * Whether the {@code PackParser} should retain object IDs.
+	 *
+	 * @return {@code true} if the parsed object IDs should be retained.
+	 * @since 7.7
+	 */
+	public boolean isRetainParsedObjectIDs() {
+		return retainParsedObjectIDs;
+	}
+
+	/**
+	 * Set whether the {@code PackParser} should retain object IDs.
+	 *
+	 * @param retain
+	 *            {@code true} to retain the parsed object IDs.
+	 * @since 7.7
+	 */
+	public void setRetainParsedObjectIDs(boolean retain) {
+		this.retainParsedObjectIDs = retain;
+	}
+
+	/**
 	 * Whether this class expects a bi-directional pipe opened between the
 	 * client and itself.
 	 *
@@ -1547,7 +1570,7 @@ private void receivePack() throws IOException {
 
 			parser = ins.newPackParser(packInputStream());
 			parser.setAllowThin(true);
-			parser.setNeedNewObjectIds(checkReferencedAreReachable);
+			parser.setNeedNewObjectIds(checkReferencedAreReachable || retainParsedObjectIDs);
 			parser.setNeedBaseObjectIds(checkReferencedAreReachable);
 			parser.setCheckEofAfterPackFooter(!biDirectionalPipe
 					&& !isExpectDataAfterPackFooter());