Junio C Hamano | d9ea73e | 2006-04-05 02:03:58 -0700 | [diff] [blame] | 1 | #ifndef XDIFF_INTERFACE_H |
| 2 | #define XDIFF_INTERFACE_H |
| 3 | |
brian m. carlson | d449347 | 2016-09-05 20:08:02 +0000 | [diff] [blame] | 4 | #include "cache.h" |
Junio C Hamano | d9ea73e | 2006-04-05 02:03:58 -0700 | [diff] [blame] | 5 | #include "xdiff/xdiff.h" |
Junio C Hamano | d9ea73e | 2006-04-05 02:03:58 -0700 | [diff] [blame] | 6 | |
Jeff King | dcd1742 | 2015-09-24 19:12:45 -0400 | [diff] [blame] | 7 | /* |
| 8 | * xdiff isn't equipped to handle content over a gigabyte; |
| 9 | * we make the cutoff 1GB - 1MB to give some breathing |
| 10 | * room for constant-sized additions (e.g., merge markers) |
| 11 | */ |
| 12 | #define MAX_XDIFF_SIZE (1024UL * 1024 * 1023) |
| 13 | |
Ævar Arnfjörð Bjarmason | 9e20442 | 2021-04-12 19:15:25 +0200 | [diff] [blame] | 14 | /** |
| 15 | * The `xdiff_emit_line_fn` function can return 1 to abort early, or 0 |
| 16 | * to continue processing. Note that doing so is an all-or-nothing |
| 17 | * affair, as returning 1 will return all the way to the top-level, |
| 18 | * e.g. the xdi_diff_outf() call to generate the diff. |
| 19 | * |
| 20 | * Thus returning 1 means you won't be getting any more diff lines. If |
| 21 | * you need something in-between those two options you'll to use |
| 22 | * `xdl_emit_hunk_consume_func_t` and implement your own version of |
| 23 | * xdl_emit_diff(). |
| 24 | * |
| 25 | * We may extend the interface in the future to understand other more |
| 26 | * granular return values. While you should return 1 to exit early, |
| 27 | * doing so will currently make your early return indistinguishable |
| 28 | * from an error internal to xdiff, xdiff itself will see that |
| 29 | * non-zero return and translate it to -1. |
Ævar Arnfjörð Bjarmason | fa59e7b | 2021-04-12 19:15:26 +0200 | [diff] [blame] | 30 | * |
| 31 | * See "diff_grep" in diffcore-pickaxe.c for a trick to work around |
| 32 | * this, i.e. using the "consume_callback_data" to note the desired |
| 33 | * early return. |
Ævar Arnfjörð Bjarmason | 9e20442 | 2021-04-12 19:15:25 +0200 | [diff] [blame] | 34 | */ |
Ævar Arnfjörð Bjarmason | a8d5eb6 | 2021-04-12 19:15:24 +0200 | [diff] [blame] | 35 | typedef int (*xdiff_emit_line_fn)(void *, char *, unsigned long); |
Jeff King | 9346d6d | 2018-11-02 02:35:45 -0400 | [diff] [blame] | 36 | typedef void (*xdiff_emit_hunk_fn)(void *data, |
| 37 | long old_begin, long old_nr, |
| 38 | long new_begin, long new_nr, |
| 39 | const char *func, long funclen); |
Junio C Hamano | d9ea73e | 2006-04-05 02:03:58 -0700 | [diff] [blame] | 40 | |
Junio C Hamano | c279d7e | 2007-12-13 13:25:07 -0800 | [diff] [blame] | 41 | int xdi_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, xdemitconf_t const *xecfg, xdemitcb_t *ecb); |
Brian Downing | c99db9d2 | 2008-08-14 00:36:50 -0500 | [diff] [blame] | 42 | int xdi_diff_outf(mmfile_t *mf1, mmfile_t *mf2, |
Jeff King | 9346d6d | 2018-11-02 02:35:45 -0400 | [diff] [blame] | 43 | xdiff_emit_hunk_fn hunk_fn, |
| 44 | xdiff_emit_line_fn line_fn, |
| 45 | void *consume_callback_data, |
René Scharfe | dfea790 | 2010-05-04 22:41:34 +0200 | [diff] [blame] | 46 | xpparam_t const *xpp, xdemitconf_t const *xecfg); |
Johannes Schindelin | 7cab588 | 2006-12-20 17:37:07 +0100 | [diff] [blame] | 47 | int read_mmfile(mmfile_t *ptr, const char *filename); |
brian m. carlson | d449347 | 2016-09-05 20:08:02 +0000 | [diff] [blame] | 48 | void read_mmblob(mmfile_t *ptr, const struct object_id *oid); |
Johannes Schindelin | 6bfce93 | 2007-06-05 03:36:11 +0100 | [diff] [blame] | 49 | int buffer_is_binary(const char *ptr, unsigned long size); |
Junio C Hamano | d9ea73e | 2006-04-05 02:03:58 -0700 | [diff] [blame] | 50 | |
Denton Liu | 5545442 | 2019-04-29 04:28:14 -0400 | [diff] [blame] | 51 | void xdiff_set_find_func(xdemitconf_t *xecfg, const char *line, int cflags); |
| 52 | void xdiff_clear_find_func(xdemitconf_t *xecfg); |
| 53 | int git_xmerge_config(const char *var, const char *value, void *cb); |
Junio C Hamano | b541248 | 2008-08-29 10:49:56 -0700 | [diff] [blame] | 54 | extern int git_xmerge_style; |
Junio C Hamano | f258475 | 2007-07-06 00:45:10 -0700 | [diff] [blame] | 55 | |
Stefan Beller | 5ec8274 | 2017-10-25 11:49:11 -0700 | [diff] [blame] | 56 | /* |
| 57 | * Compare the strings l1 with l2 which are of size s1 and s2 respectively. |
| 58 | * Returns 1 if the strings are deemed equal, 0 otherwise. |
| 59 | * The `flags` given as XDF_WHITESPACE_FLAGS determine how white spaces |
Elijah Newren | 15beaaa | 2019-11-05 17:07:23 +0000 | [diff] [blame] | 60 | * are treated for the comparison. |
Stefan Beller | 5ec8274 | 2017-10-25 11:49:11 -0700 | [diff] [blame] | 61 | */ |
Denton Liu | 5545442 | 2019-04-29 04:28:14 -0400 | [diff] [blame] | 62 | int xdiff_compare_lines(const char *l1, long s1, |
Denton Liu | ad6dad0 | 2019-04-29 04:28:23 -0400 | [diff] [blame] | 63 | const char *l2, long s2, long flags); |
Stefan Beller | 5ec8274 | 2017-10-25 11:49:11 -0700 | [diff] [blame] | 64 | |
| 65 | /* |
| 66 | * Returns a hash of the string s of length len. |
| 67 | * The `flags` given as XDF_WHITESPACE_FLAGS determine how white spaces |
| 68 | * are treated for the hash. |
| 69 | */ |
Denton Liu | 5545442 | 2019-04-29 04:28:14 -0400 | [diff] [blame] | 70 | unsigned long xdiff_hash_string(const char *s, size_t len, long flags); |
Stefan Beller | 5ec8274 | 2017-10-25 11:49:11 -0700 | [diff] [blame] | 71 | |
Junio C Hamano | d9ea73e | 2006-04-05 02:03:58 -0700 | [diff] [blame] | 72 | #endif |