git/userdiff.h
Ævar Arnfjörð Bjarmason f12fa9ee6c userdiff: add and use for_each_userdiff_driver()
Refactor the userdiff_find_by_namelen() function so that a new
for_each_userdiff_driver() API function does most of the work.

This will be useful for the same reason we've got other for_each_*()
API functions as part of various APIs, and will be used in a follow-up
commit.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-04-08 12:19:10 -07:00

51 lines
1.3 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 userdiff_driver {
const char *name;
const char *external;
int binary;
struct userdiff_funcname funcname;
const char *word_regex;
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 */