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>
This commit is contained in:
parent
3161b4b521
commit
68aacb2f3c
27
diff.c
27
diff.c
@ -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,
|
||||
|
4
diff.h
4
diff.h
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user