From: Junio C Hamano Date: Thu, 20 Jun 2024 22:45:08 +0000 (-0700) Subject: Merge branch 'rs/diff-exit-code-with-external-diff' X-Git-Tag: v2.46.0-rc0~48 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8ba7dbdefbc274628b6bdc0a4cb573c2fa08b2cf;p=thirdparty%2Fgit.git Merge branch 'rs/diff-exit-code-with-external-diff' "git diff --exit-code --ext-diff" learned to take the exit status of the external diff driver into account when deciding the exit status of the overall "git diff" invocation when configured to do so. * rs/diff-exit-code-with-external-diff: diff: let external diffs report that changes are uninteresting userdiff: add and use struct external_diff t4020: test exit code with external diffs --- 8ba7dbdefbc274628b6bdc0a4cb573c2fa08b2cf diff --cc userdiff.c index 371032a413,6cdfb147c3..c4ebb9ff73 --- a/userdiff.c +++ b/userdiff.c @@@ -445,9 -445,13 +445,13 @@@ int userdiff_config(const char *k, cons if (!strcmp(type, "binary")) return parse_tristate(&drv->binary, k, v); if (!strcmp(type, "command")) - return git_config_string((char **) &drv->external, k, v); - return git_config_string(&drv->external.cmd, k, v); ++ return git_config_string((char **) &drv->external.cmd, k, v); + if (!strcmp(type, "trustexitcode")) { + drv->external.trust_exit_code = git_config_bool(k, v); + return 0; + } if (!strcmp(type, "textconv")) - return git_config_string(&drv->textconv, k, v); + return git_config_string((char **) &drv->textconv, k, v); if (!strcmp(type, "cachetextconv")) return parse_bool(&drv->textconv_want_cache, k, v); if (!strcmp(type, "wordregex")) diff --cc userdiff.h index d726804c3e,f5cb53d0d4..7565930337 --- a/userdiff.h +++ b/userdiff.h @@@ -11,15 -11,20 +11,20 @@@ struct userdiff_funcname int cflags; }; + struct external_diff { + char *cmd; + unsigned trust_exit_code:1; + }; + struct userdiff_driver { const char *name; - const char *external; + struct external_diff external; - char *algorithm; + const char *algorithm; int binary; struct userdiff_funcname funcname; - char *word_regex; - char *word_regex_multi_byte; - char *textconv; + const char *word_regex; + const char *word_regex_multi_byte; + const char *textconv; struct notes_cache *textconv_cache; int textconv_want_cache; };