summaryrefslogtreecommitdiff
path: root/xdiff/xdiff.h
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2018-11-02 06:35:01 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-11-02 11:43:02 (GMT)
commit611e42a5980a3a9f8bb3b1b49c1abde63c7a191e (patch)
tree3c3e5ca8edb25cbb1ff14478c3e869d687b5a19e /xdiff/xdiff.h
parentcae598d9980661a978e2df4fb338518f7bf09572 (diff)
downloadgit-611e42a5980a3a9f8bb3b1b49c1abde63c7a191e.zip
git-611e42a5980a3a9f8bb3b1b49c1abde63c7a191e.tar.gz
git-611e42a5980a3a9f8bb3b1b49c1abde63c7a191e.tar.bz2
xdiff: provide a separate emit callback for hunks
The xdiff library always emits hunk header lines to our callbacks as formatted strings like "@@ -a,b +c,d @@\n". This is convenient if we're going to output a diff, but less so if we actually need to compute using those numbers, which requires re-parsing the line. In preparation for moving away from this, let's teach xdiff a new callback function which gets the broken-out hunk information. To help callers that don't want to use this new callback, if it's NULL we'll continue to format the hunk header into a string. Note that this function renames the "outf" callback to "out_line", as well. This isn't strictly necessary, but helps in two ways: 1. Now that there are two callbacks, it's nice to use more descriptive names. 2. Many callers did not zero the emit_callback_data struct, and needed to be modified to set ecb.out_hunk to NULL. By changing the name of the existing struct member, that guarantees that any new callers from in-flight topics will break the build and be examined manually. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'xdiff/xdiff.h')
-rw-r--r--xdiff/xdiff.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/xdiff/xdiff.h b/xdiff/xdiff.h
index 2356da5..b158369 100644
--- a/xdiff/xdiff.h
+++ b/xdiff/xdiff.h
@@ -86,7 +86,11 @@ typedef struct s_xpparam {
typedef struct s_xdemitcb {
void *priv;
- int (*outf)(void *, mmbuffer_t *, int);
+ int (*out_hunk)(void *,
+ long old_begin, long old_nr,
+ long new_begin, long new_nr,
+ const char *func, long funclen);
+ int (*out_line)(void *, mmbuffer_t *, int);
} xdemitcb_t;
typedef long (*find_func_t)(const char *line, long line_len, char *buffer, long buffer_size, void *priv);