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)
|
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
||||||
|
4
diff.h
4
diff.h
@ -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 {
|
|||||||
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;
|
||||||
|
Loading…
Reference in New Issue
Block a user