diff: drop useless "status" parameter from diff_result_code()
Many programs use diff_result_code() to get a user-visible program exit
code from a diff result (e.g., checking opts.found_changes if
--exit-code was requested).
This function also takes a "status" parameter, which seems at first
glance that it could be used to propagate an error encountered when
computing the diff. But it doesn't work that way:
- negative values are passed through as-is, but are not appropriate as
program exit codes
- when --exit-code or --check is in effect, we _ignore_ the passed-in
status completely. So a failed diff which did not have a chance to
set opts.found_changes would erroneously report "success, no
changes" instead of propagating the error.
After recent cleanups, neither of these bugs is possible to trigger, as
every caller just passes in "0". So rather than fixing them, we can
simply drop the useless parameter instead.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committedAug 21, 2023 at 16:20 UTC5cc6b2d70bc55ab75913ee93d9ac96ad875fbb29
12 files changed+16-18
builtin/describe.c
+1-1
index 8cdc25b748..a9e375882b 100644--- a/builtin/describe.c+++ b/builtin/describe.c@@ -687,7 +687,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix) BUG("malformed internal diff-index command line"); run_diff_index(&revs, 0);- if (!diff_result_code(&revs.diffopt, 0))+ if (!diff_result_code(&revs.diffopt)) suffix = NULL; else suffix = dirty;
builtin/diff-files.c
+1-1
index 04070607b1..f38912cd40 100644--- a/builtin/diff-files.c+++ b/builtin/diff-files.c@@ -83,7 +83,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix) if (repo_read_index_preload(the_repository, &rev.diffopt.pathspec, 0) < 0) die_errno("repo_read_index_preload"); run_diff_files(&rev, options);- result = diff_result_code(&rev.diffopt, 0);+ result = diff_result_code(&rev.diffopt); release_revisions(&rev); return result; }
builtin/diff-index.c
+1-1
index 2c6a179832..220f341ffa 100644--- a/builtin/diff-index.c+++ b/builtin/diff-index.c@@ -73,7 +73,7 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix) return -1; } run_diff_index(&rev, option);- result = diff_result_code(&rev.diffopt, 0);+ result = diff_result_code(&rev.diffopt); release_revisions(&rev); return result; }
index 4771cf02aa..8aead3e332 100644--- a/diff-no-index.c+++ b/diff-no-index.c@@ -364,7 +364,7 @@ int diff_no_index(struct rev_info *revs, * The return code for --no-index imitates diff(1): * 0 = no changes, 1 = changes, else error */- ret = diff_result_code(&revs->diffopt, 0);+ ret = diff_result_code(&revs->diffopt); out: for (i = 0; i < ARRAY_SIZE(to_free); i++)
diff.c
+2-4
index ee3eb629e3..2de5d3d098 100644--- a/diff.c+++ b/diff.c@@ -6973,16 +6973,14 @@ void diffcore_std(struct diff_options *options) options->found_follow = 0; }-int diff_result_code(struct diff_options *opt, int status)+int diff_result_code(struct diff_options *opt) { int result = 0; diff_warn_rename_limit("diff.renameLimit", opt->needed_rename_limit, opt->degraded_cc_to_c);- if (!opt->flags.exit_with_status &&- !(opt->output_format & DIFF_FORMAT_CHECKDIFF))- return status;+ if (opt->flags.exit_with_status && opt->flags.has_changes) result |= 01;
diff.h
+1-1
index 528f00d5e1..caf1528bf0 100644--- a/diff.h+++ b/diff.h@@ -647,7 +647,7 @@ int do_diff_cache(const struct object_id *, struct diff_options *); int diff_flush_patch_id(struct diff_options *, struct object_id *, int); void flush_one_hunk(struct object_id *result, git_hash_ctx *ctx);-int diff_result_code(struct diff_options *, int);+int diff_result_code(struct diff_options *); int diff_no_index(struct rev_info *, int implicit_no_index, int, const char **);
wt-status.c
+2-2
index 545cea948f..981adb09f3 100644--- a/wt-status.c+++ b/wt-status.c@@ -2581,7 +2581,7 @@ int has_unstaged_changes(struct repository *r, int ignore_submodules) rev_info.diffopt.flags.quick = 1; diff_setup_done(&rev_info.diffopt); run_diff_files(&rev_info, 0);- result = diff_result_code(&rev_info.diffopt, 0);+ result = diff_result_code(&rev_info.diffopt); release_revisions(&rev_info); return result; }@@ -2615,7 +2615,7 @@ int has_uncommitted_changes(struct repository *r, diff_setup_done(&rev_info.diffopt); run_diff_index(&rev_info, DIFF_INDEX_CACHED);- result = diff_result_code(&rev_info.diffopt, 0);+ result = diff_result_code(&rev_info.diffopt); release_revisions(&rev_info); return result; }