git/userdiff.h
Junio C Hamano 8ba7dbdefb 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
2024-06-20 15:45:08 -07:00

58 lines
1.5 KiB
C

#ifndef USERDIFF_H
#define USERDIFF_H
#include "notes-cache.h"
struct index_state;
struct repository;
struct userdiff_funcname {
const char *pattern;
int cflags;
};
struct external_diff {
char *cmd;
unsigned trust_exit_code:1;
};
struct userdiff_driver {
const char *name;
struct external_diff external;
const char *algorithm;
int binary;
struct userdiff_funcname funcname;
const char *word_regex;
const char *word_regex_multi_byte;
const char *textconv;
struct notes_cache *textconv_cache;
int textconv_want_cache;
};
enum userdiff_driver_type {
USERDIFF_DRIVER_TYPE_BUILTIN = 1<<0,
USERDIFF_DRIVER_TYPE_CUSTOM = 1<<1,
};
typedef int (*each_userdiff_driver_fn)(struct userdiff_driver *,
enum userdiff_driver_type, void *);
int userdiff_config(const char *k, const char *v);
struct userdiff_driver *userdiff_find_by_name(const char *name);
struct userdiff_driver *userdiff_find_by_path(struct index_state *istate,
const char *path);
/*
* Initialize any textconv-related fields in the driver and return it, or NULL
* if it does not have textconv enabled at all.
*/
struct userdiff_driver *userdiff_get_textconv(struct repository *r,
struct userdiff_driver *driver);
/*
* Iterate over all userdiff drivers. The userdiff_driver_type
* argument to each_userdiff_driver_fn indicates their type. Return
* non-zero to exit early from the loop.
*/
int for_each_userdiff_driver(each_userdiff_driver_fn, void *);
#endif /* USERDIFF */