Delay inserter.flush in WalkFetchConnection

Spawn an ObjectReader from the ObjectInserter, so the flush can be
delayed at the end of the fetch.

Change-Id: I35fe8c8370c06c25262645202aec2b1318057c19
Signed-off-by: Zhen Chen <czhen@google.com>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/WalkFetchConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/WalkFetchConnection.java
index 17edfdc..c90cadf 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/WalkFetchConnection.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/WalkFetchConnection.java
@@ -195,7 +195,7 @@ class WalkFetchConnection extends BaseFetchConnection {
 		local = wt.local;
 		objCheck = wt.getObjectChecker();
 		inserter = local.newObjectInserter();
-		reader = local.newObjectReader();
+		reader = inserter.newReader();
 
 		remotes = new ArrayList<WalkRemoteObjectDatabase>();
 		remotes.add(w);
@@ -240,6 +240,12 @@ protected void doFetch(final ProgressMonitor monitor,
 				downloadObject(monitor, id);
 			process(id);
 		}
+
+		try {
+			inserter.flush();
+		} catch (IOException e) {
+			throw new TransportException(e.getMessage(), e);
+		}
 	}
 
 	public Collection<PackLock> getPackLocks() {
@@ -652,7 +658,6 @@ private void verifyAndInsertLooseObject(final AnyObjectId id,
 					Constants.typeString(type),
 					Integer.valueOf(compressed.length)));
 		}
-		inserter.flush();
 	}
 
 	private Collection<WalkRemoteObjectDatabase> expandOneAlternate(
@@ -883,7 +888,6 @@ void downloadPack(final ProgressMonitor monitor) throws IOException {
 			PackLock lock = parser.parse(monitor);
 			if (lock != null)
 				packLocks.add(lock);
-			inserter.flush();
 		}
 	}
 }