diff options
author | Junio C Hamano <junkio@cox.net> | 2007-03-14 11:12:13 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-03-14 16:21:19 -0700 |
commit | 68aacb2f3ceef528ded945b510094918bfe3cb37 (patch) | |
tree | 7abe4cb4b92996233c7a765849727a893943f164 | |
parent | 3161b4b52112acb6a3eb57f3bf882e8ca131e7d3 (diff) | |
download | git-68aacb2f3ceef528ded945b510094918bfe3cb37.tar.gz |
diff --quiet
This adds the command line option 'quiet' to tell 'git diff-*'
that we are not interested in the actual diff contents but only
want to know if there is any change. This option automatically
turns --exit-code on, and turns off output formatting, as it
does not make much sense to show the first hit we happened to
have found.
The --quiet option is silently turned off (but --exit-code is
still in effect, so is silent output) if postprocessing filters
such as pickaxe and diff-filter are used. For all practical
purposes I do not think of a reason to want to use these filters
and not viewing the diff output.
The backends have not been taught about the option with this patch.
That is a topic for later rounds.
Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r-- | diff.c | 27 | ||||
-rw-r--r-- | diff.h | 4 |
2 files changed, 27 insertions, 4 deletions
@@ -1958,6 +1958,23 @@ int diff_setup_done(struct diff_options *options) if (options->abbrev <= 0 || 40 < options->abbrev) options->abbrev = 40; /* full */ + /* + * It does not make sense to show the first hit we happened + * to have found. It does not make sense not to return with + * exit code in such a case either. + */ + if (options->quiet) { + options->output_format = DIFF_FORMAT_NO_OUTPUT; + options->exit_with_status = 1; + } + + /* + * If we postprocess in diffcore, we cannot simply return + * upon the first hit. We need to run diff as usual. + */ + if (options->pickaxe || options->filter) + options->quiet = 0; + return 0; } @@ -2136,6 +2153,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) options->detect_rename = 0; else if (!strcmp(arg, "--exit-code")) options->exit_with_status = 1; + else if (!strcmp(arg, "--quiet")) + options->quiet = 1; else return 0; return 1; @@ -2900,6 +2919,8 @@ static void diffcore_apply_filter(const char *filter) void diffcore_std(struct diff_options *options) { + if (options->quiet) + return; if (options->break_opt != -1) diffcore_break(options->break_opt); if (options->detect_rename) @@ -2912,8 +2933,8 @@ void diffcore_std(struct diff_options *options) diffcore_order(options->orderfile); diff_resolve_rename_copy(); diffcore_apply_filter(options->filter); - if (options->exit_with_status) - options->has_changes = !!diff_queued_diff.nr; + + options->has_changes = !!diff_queued_diff.nr; } @@ -2952,6 +2973,7 @@ void diff_addremove(struct diff_options *options, fill_filespec(two, sha1, mode); diff_queue(&diff_queued_diff, one, two); + options->has_changes = 1; } void diff_change(struct diff_options *options, @@ -2977,6 +2999,7 @@ void diff_change(struct diff_options *options, fill_filespec(two, new_sha1, new_mode); diff_queue(&diff_queued_diff, one, two); + options->has_changes = 1; } void diff_unmerge(struct diff_options *options, @@ -57,6 +57,8 @@ struct diff_options { find_copies_harder:1, color_diff:1, color_diff_words:1, + has_changes:1, + quiet:1, exit_with_status:1; int context; int break_opt; @@ -72,8 +74,6 @@ struct diff_options { const char *msg_sep; const char *stat_sep; long xdl_opts; - /* 0 - no differences; only meaningful if exit_with_status set */ - int has_changes; int stat_width; int stat_name_width; |