]>
Commit | Line | Data |
---|---|---|
12da1d1f TR |
1 | #ifndef LINE_LOG_H |
2 | #define LINE_LOG_H | |
3 | ||
12da1d1f TR |
4 | struct rev_info; |
5 | struct commit; | |
41227cb1 | 6 | struct 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. */ | |
10 | struct range { | |
11 | long start, end; | |
12 | }; | |
13 | ||
14 | /* A set of ranges. The ranges must always be disjoint and sorted. */ | |
15 | struct 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. */ | |
22 | struct diff_ranges { | |
23 | struct range_set parent; | |
24 | struct range_set target; | |
25 | }; | |
26 | ||
55454427 DL |
27 | void range_set_init(struct range_set *, size_t prealloc); |
28 | void range_set_release(struct range_set *); | |
c0babbe6 | 29 | /* Range includes start; excludes end */ |
55454427 | 30 | void 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 | 32 | void 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 | 37 | void 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 |
45 | struct 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 | 53 | void line_log_init(struct rev_info *rev, const char *prefix, struct string_list *args); |
12da1d1f | 54 | |
55454427 | 55 | int line_log_filter(struct rev_info *rev); |
3cb9d2b6 SG |
56 | int line_log_process_ranges_arbitrary_commit(struct rev_info *rev, |
57 | struct commit *commit); | |
12da1d1f | 58 | |
55454427 | 59 | int line_log_print(struct rev_info *rev, struct commit *commit); |
12da1d1f | 60 | |
8ef8da48 JK |
61 | void line_log_free(struct rev_info *rev); |
62 | ||
12da1d1f | 63 | #endif /* LINE_LOG_H */ |