Merge "Always fetch tags during clone"
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java
index 3d79357..d863f45 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java
@@ -68,6 +68,7 @@
 import org.eclipse.jgit.lib.RepositoryTestCase;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.storage.file.ReflogReader;
 import org.eclipse.jgit.treewalk.TreeWalk;
 import org.eclipse.jgit.util.FileUtils;
 import org.junit.Test;
@@ -150,8 +151,8 @@ public class CommitAndLogCommandTests extends RepositoryTestCase {
 
 	@Test
 	public void testSomeCommits() throws NoHeadException, NoMessageException,
-			UnmergedPathException, ConcurrentRefUpdateException,
-			JGitInternalException, WrongRepositoryStateException {
+			ConcurrentRefUpdateException, JGitInternalException,
+			WrongRepositoryStateException, IOException {
 
 		// do 4 commits
 		Git git = new Git(db);
@@ -180,6 +181,8 @@ public void testSomeCommits() throws NoHeadException, NoMessageException,
 			l--;
 		}
 		assertEquals(l, -1);
+		ReflogReader reader = db.getReflogReader(Constants.HEAD);
+		assertTrue(reader.getLastEntry().getComment().startsWith("commit:"));
 	}
 
 	// try to do a commit without specifying a message. Should fail!
@@ -319,8 +322,8 @@ public void testCommitRange() throws NoHeadException, NoMessageException,
 
 	@Test
 	public void testCommitAmend() throws NoHeadException, NoMessageException,
-			UnmergedPathException, ConcurrentRefUpdateException,
-			JGitInternalException, WrongRepositoryStateException {
+			ConcurrentRefUpdateException, JGitInternalException,
+			WrongRepositoryStateException, IOException {
 		Git git = new Git(db);
 		git.commit().setMessage("first comit").call(); // typo
 		git.commit().setAmend(true).setMessage("first commit").call();
@@ -332,6 +335,9 @@ public void testCommitAmend() throws NoHeadException, NoMessageException,
 			c++;
 		}
 		assertEquals(1, c);
+		ReflogReader reader = db.getReflogReader(Constants.HEAD);
+		assertTrue(reader.getLastEntry().getComment()
+				.startsWith("commit (amend):"));
 	}
 
 	@Test
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/PackWriterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/PackWriterTest.java
index 7a829de..20e32b2 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/PackWriterTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/PackWriterTest.java
@@ -58,7 +58,6 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -125,9 +124,11 @@ public void tearDown() throws Exception {
 
 	/**
 	 * Test constructor for exceptions, default settings, initialization.
+	 *
+	 * @throws IOException
 	 */
 	@Test
-	public void testContructor() {
+	public void testContructor() throws IOException {
 		writer = new PackWriter(config, db.newObjectReader());
 		assertEquals(false, writer.isDeltaBaseAsOffset());
 		assertEquals(true, config.isReuseDeltas());
@@ -177,7 +178,7 @@ public void testWriteEmptyPack1() throws IOException {
 	 */
 	@Test
 	public void testWriteEmptyPack2() throws IOException {
-		createVerifyOpenPack(EMPTY_LIST_REVS.iterator());
+		createVerifyOpenPack(EMPTY_LIST_REVS);
 
 		assertEquals(0, writer.getObjectsNumber());
 		assertEquals(0, pack.getObjectCount());
@@ -320,7 +321,7 @@ public void testWritePack3() throws MissingObjectException, IOException {
 		for (int i = 0; i < forcedOrder.length; i++)
 			forcedOrderRevs[i] = parser.parseAny(forcedOrder[i]);
 
-		createVerifyOpenPack(Arrays.asList(forcedOrderRevs).iterator());
+		createVerifyOpenPack(Arrays.asList(forcedOrderRevs));
 
 		assertEquals(forcedOrder.length, writer.getObjectsNumber());
 		verifyObjectsOrder(forcedOrder);
@@ -544,11 +545,12 @@ private void createVerifyOpenPack(final Collection<ObjectId> interestings,
 		verifyOpenPack(thin);
 	}
 
-	private void createVerifyOpenPack(final Iterator<RevObject> objectSource)
+	private void createVerifyOpenPack(final List<RevObject> objectSource)
 			throws MissingObjectException, IOException {
 		NullProgressMonitor m = NullProgressMonitor.INSTANCE;
 		writer = new PackWriter(config, db.newObjectReader());
-		writer.preparePack(objectSource);
+		writer.preparePack(objectSource.iterator());
+		assertEquals(objectSource.size(), writer.getObjectsNumber());
 		writer.writePack(m, m, os);
 		writer.release();
 		verifyOpenPack(false);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java
index 8d9ce98..0d7a7da 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java
@@ -211,8 +211,9 @@ public RevCommit call() throws NoHeadException, NoMessageException,
 						RevCommit revCommit = revWalk.parseCommit(commitId);
 						RefUpdate ru = repo.updateRef(Constants.HEAD);
 						ru.setNewObjectId(commitId);
-						ru.setRefLogMessage("commit : "
-								+ revCommit.getShortMessage(), false);
+						String prefix = amend ? "commit (amend): " : "commit: ";
+						ru.setRefLogMessage(
+								prefix + revCommit.getShortMessage(), false);
 
 						ru.setExpectedOldObjectId(headId);
 						Result rc = ru.forceUpdate();
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java
index 2eb2700..5039eed 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java
@@ -402,8 +402,18 @@ public void setTagTargets(Set<ObjectId> objects) {
 	 * Returns objects number in a pack file that was created by this writer.
 	 *
 	 * @return number of objects in pack.
+	 * @throws IOException
+	 *             a cached pack cannot supply its object count.
 	 */
-	public long getObjectsNumber() {
+	public long getObjectsNumber() throws IOException {
+		if (stats.totalObjects == 0) {
+			long objCnt = 0;
+			for (List<ObjectToPack> list : objectsLists)
+				objCnt += list.size();
+			for (CachedPack pack : cachedPacks)
+				objCnt += pack.getObjectCount();
+			return objCnt;
+		}
 		return stats.totalObjects;
 	}
 
@@ -635,13 +645,8 @@ public void writePack(ProgressMonitor compressMonitor,
 		final PackOutputStream out = new PackOutputStream(writeMonitor,
 				packStream, this);
 
-		long objCnt = 0;
-		for (List<ObjectToPack> list : objectsLists)
-			objCnt += list.size();
-		for (CachedPack pack : cachedPacks)
-			objCnt += pack.getObjectCount();
+		long objCnt = getObjectsNumber();
 		stats.totalObjects = objCnt;
-
 		writeMonitor.beginTask(JGitText.get().writingObjects, (int) objCnt);
 		long writeStart = System.currentTimeMillis();