]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'rs/diff-exit-code-with-external-diff'
authorJunio C Hamano <gitster@pobox.com>
Thu, 20 Jun 2024 22:45:08 +0000 (15:45 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 20 Jun 2024 22:45:08 +0000 (15:45 -0700)
"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

1  2 
diff.c
userdiff.c
userdiff.h

diff --cc diff.c
Simple merge
diff --cc userdiff.c
index 371032a4132ef83eb2178696cbd4a88e03e8fd82,6cdfb147c3efcd17c31cbc168d8d2387773a3e85..c4ebb9ff73464ad20a5e78f93625a192e45ecd93
@@@ -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 d726804c3e5ee8879ff41d5a424569f9e1b10e3d,f5cb53d0d4f446ff7d2439c999effbeb4c6dcefb..7565930337cf5546e8b316d3725e630917f8f7d1
@@@ -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;
  };