提交 68aacb2f 编写于 作者: J Junio C Hamano

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: NJunio C Hamano <junkio@cox.net>
上级 3161b4b5
...@@ -1958,6 +1958,23 @@ int diff_setup_done(struct diff_options *options) ...@@ -1958,6 +1958,23 @@ int diff_setup_done(struct diff_options *options)
if (options->abbrev <= 0 || 40 < options->abbrev) if (options->abbrev <= 0 || 40 < options->abbrev)
options->abbrev = 40; /* full */ 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; return 0;
} }
...@@ -2136,6 +2153,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) ...@@ -2136,6 +2153,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
options->detect_rename = 0; options->detect_rename = 0;
else if (!strcmp(arg, "--exit-code")) else if (!strcmp(arg, "--exit-code"))
options->exit_with_status = 1; options->exit_with_status = 1;
else if (!strcmp(arg, "--quiet"))
options->quiet = 1;
else else
return 0; return 0;
return 1; return 1;
...@@ -2900,6 +2919,8 @@ static void diffcore_apply_filter(const char *filter) ...@@ -2900,6 +2919,8 @@ static void diffcore_apply_filter(const char *filter)
void diffcore_std(struct diff_options *options) void diffcore_std(struct diff_options *options)
{ {
if (options->quiet)
return;
if (options->break_opt != -1) if (options->break_opt != -1)
diffcore_break(options->break_opt); diffcore_break(options->break_opt);
if (options->detect_rename) if (options->detect_rename)
...@@ -2912,8 +2933,8 @@ void diffcore_std(struct diff_options *options) ...@@ -2912,8 +2933,8 @@ void diffcore_std(struct diff_options *options)
diffcore_order(options->orderfile); diffcore_order(options->orderfile);
diff_resolve_rename_copy(); diff_resolve_rename_copy();
diffcore_apply_filter(options->filter); 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, ...@@ -2952,6 +2973,7 @@ void diff_addremove(struct diff_options *options,
fill_filespec(two, sha1, mode); fill_filespec(two, sha1, mode);
diff_queue(&diff_queued_diff, one, two); diff_queue(&diff_queued_diff, one, two);
options->has_changes = 1;
} }
void diff_change(struct diff_options *options, void diff_change(struct diff_options *options,
...@@ -2977,6 +2999,7 @@ 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); fill_filespec(two, new_sha1, new_mode);
diff_queue(&diff_queued_diff, one, two); diff_queue(&diff_queued_diff, one, two);
options->has_changes = 1;
} }
void diff_unmerge(struct diff_options *options, void diff_unmerge(struct diff_options *options,
......
...@@ -57,6 +57,8 @@ struct diff_options { ...@@ -57,6 +57,8 @@ struct diff_options {
find_copies_harder:1, find_copies_harder:1,
color_diff:1, color_diff:1,
color_diff_words:1, color_diff_words:1,
has_changes:1,
quiet:1,
exit_with_status:1; exit_with_status:1;
int context; int context;
int break_opt; int break_opt;
...@@ -72,8 +74,6 @@ struct diff_options { ...@@ -72,8 +74,6 @@ struct diff_options {
const char *msg_sep; const char *msg_sep;
const char *stat_sep; const char *stat_sep;
long xdl_opts; long xdl_opts;
/* 0 - no differences; only meaningful if exit_with_status set */
int has_changes;
int stat_width; int stat_width;
int stat_name_width; int stat_name_width;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册