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