diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2007-02-25 23:34:54 +0100 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-02-26 01:20:55 -0800 |
commit | 34a5e1a2d900b5dd9b9c446a3db9fdb3b29e0575 (patch) | |
tree | 7fa9bb068204e40a282a0b3b065069055b787cca /diff.c | |
parent | 048f48a2fdefdf71e7af19ec7111000ce2ebf52e (diff) | |
download | git-34a5e1a2d900b5dd9b9c446a3db9fdb3b29e0575.tar.gz git-34a5e1a2d900b5dd9b9c446a3db9fdb3b29e0575.tar.xz |
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>
Diffstat (limited to 'diff.c')
-rw-r--r-- | diff.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -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; |