checkout: error out when index is unmerged even with -m

Even when -m is given to allow fallilng back to 3-way merge
while switching branches, we should refuse if the original index
is unmerged.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
diff --git a/builtin-checkout.c b/builtin-checkout.c
index 283831e..d5f0930 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -226,24 +226,25 @@
 		refresh_cache(REFRESH_QUIET);
 
 		if (unmerged_cache()) {
-			ret = opts->merge ? -1 :
-				error("you need to resolve your current index first");
-		} else {
-			topts.update = 1;
-			topts.merge = 1;
-			topts.gently = opts->merge;
-			topts.verbose_update = !opts->quiet;
-			topts.fn = twoway_merge;
-			topts.dir = xcalloc(1, sizeof(*topts.dir));
-			topts.dir->show_ignored = 1;
-			topts.dir->exclude_per_dir = ".gitignore";
-			tree = parse_tree_indirect(old->commit->object.sha1);
-			init_tree_desc(&trees[0], tree->buffer, tree->size);
-			tree = parse_tree_indirect(new->commit->object.sha1);
-			init_tree_desc(&trees[1], tree->buffer, tree->size);
-			ret = unpack_trees(2, trees, &topts);
+			error("you need to resolve your current index first");
+			return 1;
 		}
-		if (ret) {
+
+		/* 2-way merge to the new branch */
+		topts.update = 1;
+		topts.merge = 1;
+		topts.gently = opts->merge;
+		topts.verbose_update = !opts->quiet;
+		topts.fn = twoway_merge;
+		topts.dir = xcalloc(1, sizeof(*topts.dir));
+		topts.dir->show_ignored = 1;
+		topts.dir->exclude_per_dir = ".gitignore";
+		tree = parse_tree_indirect(old->commit->object.sha1);
+		init_tree_desc(&trees[0], tree->buffer, tree->size);
+		tree = parse_tree_indirect(new->commit->object.sha1);
+		init_tree_desc(&trees[1], tree->buffer, tree->size);
+
+		if (unpack_trees(2, trees, &topts)) {
 			/*
 			 * Unpack couldn't do a trivial merge; either
 			 * give up or do a real merge, depending on