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