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/log-tree.c b/log-tree.c
index ab6b682..9d8d46f 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -164,9 +164,22 @@
 		return 0;
 	}
 
-	if (opt->loginfo && !opt->no_commit_id)
+	if (opt->loginfo && !opt->no_commit_id) {
+		/* When showing a verbose header (i.e. log message),
+		 * and not in --pretty=oneline format, we would want
+		 * an extra newline between the end of log and the
+		 * output for readability.
+		 */
 		show_log(opt, opt->diffopt.msg_sep);
-
+		if (opt->verbose_header &&
+		    opt->commit_format != CMIT_FMT_ONELINE) {
+			int pch = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_PATCH;
+			if ((pch & opt->diffopt.output_format) == pch)
+				printf("---%c", opt->diffopt.line_termination);
+			else
+				putchar(opt->diffopt.line_termination);
+		}
+	}
 	diff_flush(&opt->diffopt);
 	return 1;
 }