diff --no-index: also imitate the exit status of diff(1)
diff sets the exit status to 0 when no changes were found, to 1 when changes were found, and 2 means error. We imitate this to be able to use "git diff" in the test scripts. (Actually, keeping in line with the rest of git, -1 is returned on error, which corresponds to an exit status 255). To find out if the diff is not empty, a member called "found_changes" was introduced in struct diff_options, which is set in builtin_diff() and fn_out_consume(). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
048f48a2fd
commit
34a5e1a2d9
6
diff.c
6
diff.c
@ -382,6 +382,7 @@ struct emit_callback {
|
||||
int nparents, color_diff;
|
||||
const char **label_path;
|
||||
struct diff_words_data *diff_words;
|
||||
int *found_changesp;
|
||||
};
|
||||
|
||||
static void free_diff_words_data(struct emit_callback *ecbdata)
|
||||
@ -501,6 +502,8 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
|
||||
const char *set = diff_get_color(ecbdata->color_diff, DIFF_METAINFO);
|
||||
const char *reset = diff_get_color(ecbdata->color_diff, DIFF_RESET);
|
||||
|
||||
*(ecbdata->found_changesp) = 1;
|
||||
|
||||
if (ecbdata->label_path[0]) {
|
||||
const char *name_a_tab, *name_b_tab;
|
||||
|
||||
@ -1098,6 +1101,7 @@ static void builtin_diff(const char *name_a,
|
||||
if (complete_rewrite) {
|
||||
emit_rewrite_diff(name_a, name_b, one, two,
|
||||
o->color_diff);
|
||||
o->found_changes = 1;
|
||||
goto free_ab_and_return;
|
||||
}
|
||||
}
|
||||
@ -1115,6 +1119,7 @@ static void builtin_diff(const char *name_a,
|
||||
else
|
||||
printf("Binary files %s and %s differ\n",
|
||||
lbl[0], lbl[1]);
|
||||
o->found_changes = 1;
|
||||
}
|
||||
else {
|
||||
/* Crazy xdl interfaces.. */
|
||||
@ -1127,6 +1132,7 @@ static void builtin_diff(const char *name_a,
|
||||
memset(&ecbdata, 0, sizeof(ecbdata));
|
||||
ecbdata.label_path = lbl;
|
||||
ecbdata.color_diff = o->color_diff;
|
||||
ecbdata.found_changesp = &o->found_changes;
|
||||
xpp.flags = XDF_NEED_MINIMAL | o->xdl_opts;
|
||||
xecfg.ctxlen = o->context;
|
||||
xecfg.flags = XDL_EMIT_FUNCNAMES;
|
||||
|
Reference in New Issue
Block a user