Fix some more diff options changes.

This fixes various problems in the new diff options code.

 - Fix --cc/-c --patch; it showed two-tree diff used internally.

 - Use "---\n" only where it matters -- that is, use it
   immediately after the commit log text when we show a
   commit log and something else before the patch text.

 - Do not output spurious extra "\n"; have an extra newline
   after the commit log text always when we have diff output and
   we are not doing oneline.

 - When running a pickaxe you need to go recursive.

Signed-off-by: Junio C Hamano <junkio@cox.net>
diff --git a/diff.c b/diff.c
index 6d04be4..1c131ff 100644
--- a/diff.c
+++ b/diff.c
@@ -1424,7 +1424,7 @@
 	options->break_opt = -1;
 	options->rename_limit = -1;
 	options->context = 3;
-	options->msg_sep = "\n";
+	options->msg_sep = "";
 
 	options->change = diff_change;
 	options->add_remove = diff_addremove;
@@ -1455,6 +1455,11 @@
 				      DIFF_FORMAT_DIFFSTAT |
 				      DIFF_FORMAT_CHECKDIFF))
 		options->recursive = 1;
+	/*
+	 * Also pickaxe would not work very well if you do not say recursive
+	 */
+	if (options->pickaxe)
+		options->recursive = 1;
 
 	if (options->detect_rename && options->rename_limit < 0)
 		options->rename_limit = diff_rename_limit_default;
@@ -2143,9 +2148,6 @@
 	if (output_format & DIFF_FORMAT_DIFFSTAT) {
 		struct diffstat_t diffstat;
 
-		if (separator++)
-			putchar('\n');
-
 		memset(&diffstat, 0, sizeof(struct diffstat_t));
 		diffstat.xm.consume = diffstat_consume;
 		for (i = 0; i < q->nr; i++) {
@@ -2154,14 +2156,13 @@
 				diff_flush_stat(p, options, &diffstat);
 		}
 		show_stats(&diffstat);
+		separator++;
 	}
 
 	if (output_format & DIFF_FORMAT_SUMMARY && !is_summary_empty(q)) {
-		if (separator++)
-			putchar('\n');
-
 		for (i = 0; i < q->nr; i++)
 			diff_summary(q->queue[i]);
+		separator++;
 	}
 
 	if (output_format & DIFF_FORMAT_PATCH) {