On Sun, Jul 29, 2007 at 01:04:13PM +0100, Johannes Schindelin wrote: > The idea is this: when "--quiet" was given, we do not output anything, and > therefore do not have to recurse into the directories, because we already > know that there are differences when a _tree_ is different. I do not > remember all details of the "--quiet" implementation, but I think that it > > - exits early (as you said) > > - does not turn on "recursive" to avoid unnecessary work. OK, looking through the code, this works _sometimes_. If I say "git-diff --quiet" then it will not recurse. If I say "git-diff -p --quiet" then it will (even though we never show the -p output). Since --quiet supersedes all output formats, I think it probably should just clear the recursive option entirely. In which case rather than special-casing quiet to avoid recursion in git-diff, we can simply turn on recursion before parsing options (and it will get turned off correctly by any diff options that need to do so). Something like: diff --git a/builtin-diff.c b/builtin-diff.c index 7f367b6..e6d10bd 100644 --- a/builtin-diff.c +++ b/builtin-diff.c @@ -229,6 +229,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) argc = setup_revisions(argc, argv, &rev, NULL); if (!rev.diffopt.output_format) { rev.diffopt.output_format = DIFF_FORMAT_PATCH; + rev.diffopt.recursive = 1; if (diff_setup_done(&rev.diffopt) < 0) die("diff_setup_done failed"); } diff --git a/diff.c b/diff.c index a5fc56b..aeae1a3 100644 --- a/diff.c +++ b/diff.c @@ -2182,6 +2182,7 @@ int diff_setup_done(struct diff_options *options) if (options->quiet) { options->output_format = DIFF_FORMAT_NO_OUTPUT; options->exit_with_status = 1; + options->recursive = 0; } /* But maybe that doesn't work because some of the options need recursion turned on, even if --quiet is specified. I have to admit, there are a lot of code paths here and I'm not sure how all of them interact with the recursive option. So perhaps it is better to just special case options->quiet as you suggested. -Peff - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html