]> git.ipfire.org Git - thirdparty/git.git/blame - line-log.h
Documentation/RelNotes/2.45.0.txt: fix typo
[thirdparty/git.git] / line-log.h
CommitLineData
12da1d1f
TR
1#ifndef LINE_LOG_H
2#define LINE_LOG_H
3
12da1d1f
TR
4struct rev_info;
5struct commit;
41227cb1 6struct string_list;
12da1d1f
TR
7
8/* A range [start,end]. Lines are numbered starting at 0, and the
9 * ranges include start but exclude end. */
10struct range {
11 long start, end;
12};
13
14/* A set of ranges. The ranges must always be disjoint and sorted. */
15struct range_set {
071bcaab 16 unsigned int alloc, nr;
12da1d1f
TR
17 struct range *ranges;
18};
19
20/* A diff, encoded as the set of pre- and post-image ranges where the
21 * files differ. A pair of ranges corresponds to a hunk. */
22struct diff_ranges {
23 struct range_set parent;
24 struct range_set target;
25};
26
55454427
DL
27void range_set_init(struct range_set *, size_t prealloc);
28void range_set_release(struct range_set *);
c0babbe6 29/* Range includes start; excludes end */
55454427 30void range_set_append_unsafe(struct range_set *, long start, long end);
c0babbe6 31/* New range must begin at or after end of last added range */
55454427 32void range_set_append(struct range_set *, long start, long end);
c0babbe6
ES
33/*
34 * In-place pass of sorting and merging the ranges in the range set,
35 * to sort and make the ranges disjoint.
36 */
55454427 37void sort_and_merge_range_set(struct range_set *);
c0babbe6 38
12da1d1f 39/* Linked list of interesting files and their associated ranges. The
31c61918
TR
40 * list must be kept sorted by path.
41 *
42 * For simplicity, even though this is highly redundant, each
43 * line_log_data owns its 'path'.
44 */
12da1d1f
TR
45struct line_log_data {
46 struct line_log_data *next;
31c61918 47 char *path;
12da1d1f 48 struct range_set ranges;
12da1d1f
TR
49 struct diff_filepair *pair;
50 struct diff_ranges diff;
51};
52
55454427 53void line_log_init(struct rev_info *rev, const char *prefix, struct string_list *args);
12da1d1f 54
55454427 55int line_log_filter(struct rev_info *rev);
3cb9d2b6
SG
56int line_log_process_ranges_arbitrary_commit(struct rev_info *rev,
57 struct commit *commit);
12da1d1f 58
55454427 59int line_log_print(struct rev_info *rev, struct commit *commit);
12da1d1f 60
8ef8da48
JK
61void line_log_free(struct rev_info *rev);
62
12da1d1f 63#endif /* LINE_LOG_H */