Merge "Add toString for TrackingRefUpdate"
diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/FileSender.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/FileSender.java
index 731b4ca..91e749e 100644
--- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/FileSender.java
+++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/FileSender.java
@@ -220,7 +220,6 @@ private boolean initRangeRequest(final HttpServletRequest req,
 		return true;
 	}
 
-	@SuppressWarnings("unchecked")
 	private static Enumeration<String> getRange(final HttpServletRequest req) {
 		return req.getHeaders(HDR_RANGE);
 	}
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java
index eee98d4..8c769e6 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Merge.java
@@ -87,7 +87,7 @@ protected void run() throws Exception {
 
 		switch (result.getMergeStatus()) {
 		case ALREADY_UP_TO_DATE:
-			out.println(CLIText.get().alreadyUpToDate);
+			outw.println(CLIText.get().alreadyUpToDate);
 			break;
 		case FAST_FORWARD:
 			outw.println(result.getMergeStatus().toString());
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java
index 2c10cf9..534e6de 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Push.java
@@ -252,7 +252,7 @@ private String safeAbbreviate(ObjectReader reader, ObjectId id) {
 	private void printUpdateLine(final char flag, final String summary,
 			final String srcRef, final String destRef, final String message)
 			throws IOException {
-		out.format(" %c %-17s", valueOf(flag), summary);
+		outw.format(" %c %-17s", valueOf(flag), summary);
 
 		if (srcRef != null)
 			outw.format(" %s ->", abbreviateRef(srcRef, true));
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java
index 64e3859..6abbfb0 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Status.java
@@ -43,6 +43,7 @@
 
 package org.eclipse.jgit.pgm;
 
+import java.io.IOException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -69,10 +70,10 @@ protected void run() throws Exception {
 		boolean firstHeader = true;
 		if (head != null && head.isSymbolic()) {
 			String branch = Repository.shortenRefName(head.getLeaf().getName());
-			out.println(CLIText.formatLine(
+			outw.println(CLIText.formatLine(
 					MessageFormat.format(CLIText.get().onBranch, branch)));
 		} else
-			out.println(CLIText.formatLine(CLIText.get().notOnAnyBranch));
+			outw.println(CLIText.formatLine(CLIText.get().notOnAnyBranch));
 		// List changes
 		org.eclipse.jgit.api.Status status = new Git(db).status().call();
 		Collection<String> added = status.getAdded();
@@ -122,22 +123,24 @@ protected void run() throws Exception {
 		}
 	}
 
-	protected void printSectionHeader(String pattern, Object... arguments) {
-		out.println(CLIText.formatLine(MessageFormat.format(pattern, arguments)));
+	protected void printSectionHeader(String pattern, Object... arguments)
+			throws IOException {
+		outw.println(CLIText.formatLine(MessageFormat
+				.format(pattern, arguments)));
 		if (!pattern.equals(""))
-			out.println(CLIText.formatLine(""));
-		out.flush();
+			outw.println(CLIText.formatLine(""));
+		outw.flush();
 	}
 
-	protected int printList(Collection<String> list) {
+	protected int printList(Collection<String> list) throws IOException {
 		if (!list.isEmpty()) {
 			List<String> sortedList = new ArrayList<String>(list);
 			java.util.Collections.sort(sortedList);
 			for (String filename : sortedList) {
-				out.println(CLIText.formatLine(String.format(
+				outw.println(CLIText.formatLine(String.format(
 						statusFileListFormat, filename)));
 			}
-			out.flush();
+			outw.flush();
 			return list.size();
 		} else
 			return 0;
@@ -146,7 +149,8 @@ protected int printList(Collection<String> list) {
 	protected int printList(String status1, String status2, String status3,
 			Collection<String> list, Collection<String> set1,
 			Collection<String> set2,
-			@SuppressWarnings("unused") Collection<String> set3) {
+			@SuppressWarnings("unused") Collection<String> set3)
+			throws IOException {
 		List<String> sortedList = new ArrayList<String>(list);
 		java.util.Collections.sort(sortedList);
 		for (String filename : sortedList) {
@@ -158,9 +162,9 @@ else if (set2.contains(filename))
 			else
 				// if (set3.contains(filename))
 				prefix = status3;
-			out.println(CLIText.formatLine(String.format(
+			outw.println(CLIText.formatLine(String.format(
 					statusFileListFormatWithPrefix, prefix, filename)));
-			out.flush();
+			outw.flush();
 		}
 		return list.size();
 	}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PathCheckoutCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PathCheckoutCommandTest.java
index 243d791..d37f572 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PathCheckoutCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/PathCheckoutCommandTest.java
@@ -47,11 +47,13 @@
 import java.io.File;
 import java.io.IOException;
 
+import org.eclipse.jgit.api.errors.JGitInternalException;
 import org.eclipse.jgit.dircache.DirCache;
 import org.eclipse.jgit.dircache.DirCacheEntry;
 import org.eclipse.jgit.errors.NoWorkTreeException;
 import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.RepositoryState;
 import org.eclipse.jgit.lib.RepositoryTestCase;
 import org.eclipse.jgit.lib.StoredConfig;
 import org.eclipse.jgit.revwalk.RevCommit;
@@ -243,4 +245,23 @@ public void testCheckoutRepository() throws Exception {
 		assertEquals("1", read(test));
 		assertEquals("a", read(test2));
 	}
+
+	@Test(expected = JGitInternalException.class)
+	public void testCheckoutOfConflictingFileShouldThrow()
+			throws Exception {
+		// Setup
+		git.checkout().setCreateBranch(true).setName("conflict")
+				.setStartPoint(initialCommit).call();
+		writeTrashFile(FILE1, "Conflicting");
+		RevCommit conflict = git.commit().setAll(true)
+				.setMessage("Conflicting change").call();
+
+		git.checkout().setName("master").call();
+
+		git.merge().include(conflict).call();
+		assertEquals(RepositoryState.MERGING, db.getRepositoryState());
+
+		// Now check out the conflicting path
+		git.checkout().addPath(FILE1).call();
+	}
 }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogResolveTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogResolveTest.java
index fe28b47..80cd163 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogResolveTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ReflogResolveTest.java
@@ -152,6 +152,7 @@ public void resolvePreviousBranch() throws Exception {
 			db.resolve("@{-1}@{0}");
 			fail();
 		} catch (RevisionSyntaxException e) {
+			// good
 		}
 		assertEquals(c1.getName(), db.resolve("@{-2}@{0}").getName());
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java
index d8efbe7..57f47a4 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java
@@ -64,6 +64,7 @@
 import org.eclipse.jgit.dircache.DirCacheEntry;
 import org.eclipse.jgit.dircache.DirCacheIterator;
 import org.eclipse.jgit.errors.AmbiguousObjectException;
+import org.eclipse.jgit.errors.UnmergedPathException;
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.lib.Constants;
@@ -284,7 +285,8 @@ protected CheckoutCommand checkoutPaths() throws IOException,
 			startWalk.setRecursive(true);
 			if (!checkoutAllPaths)
 				startWalk.setFilter(PathFilterGroup.createFromStrings(paths));
-			boolean checkoutIndex = startCommit == null && startPoint == null;
+			final boolean checkoutIndex = startCommit == null
+					&& startPoint == null;
 			if (!checkoutIndex)
 				startWalk.addTree(revWalk.parseCommit(getStartPoint())
 						.getTree());
@@ -299,6 +301,11 @@ protected CheckoutCommand checkoutPaths() throws IOException,
 					final FileMode mode = startWalk.getFileMode(0);
 					editor.add(new PathEdit(startWalk.getPathString()) {
 						public void apply(DirCacheEntry ent) {
+							if (checkoutIndex
+									&& ent.getStage() > DirCacheEntry.STAGE_0) {
+								UnmergedPathException e = new UnmergedPathException(ent);
+								throw new JGitInternalException(e.getMessage(), e);
+							}
 							ent.setObjectId(blobId);
 							ent.setFileMode(mode);
 							File file = new File(workTree, ent.getPathString());