You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.8 KiB
63 lines
1.8 KiB
#ifndef LINE_LOG_H |
|
#define LINE_LOG_H |
|
|
|
#include "diffcore.h" |
|
|
|
struct rev_info; |
|
struct commit; |
|
|
|
/* A range [start,end]. Lines are numbered starting at 0, and the |
|
* ranges include start but exclude end. */ |
|
struct range { |
|
long start, end; |
|
}; |
|
|
|
/* A set of ranges. The ranges must always be disjoint and sorted. */ |
|
struct range_set { |
|
unsigned int alloc, nr; |
|
struct range *ranges; |
|
}; |
|
|
|
/* A diff, encoded as the set of pre- and post-image ranges where the |
|
* files differ. A pair of ranges corresponds to a hunk. */ |
|
struct diff_ranges { |
|
struct range_set parent; |
|
struct range_set target; |
|
}; |
|
|
|
extern void range_set_init(struct range_set *, size_t prealloc); |
|
extern void range_set_release(struct range_set *); |
|
/* Range includes start; excludes end */ |
|
extern void range_set_append_unsafe(struct range_set *, long start, long end); |
|
/* New range must begin at or after end of last added range */ |
|
extern void range_set_append(struct range_set *, long start, long end); |
|
/* |
|
* In-place pass of sorting and merging the ranges in the range set, |
|
* to sort and make the ranges disjoint. |
|
*/ |
|
extern void sort_and_merge_range_set(struct range_set *); |
|
|
|
/* Linked list of interesting files and their associated ranges. The |
|
* list must be kept sorted by path. |
|
* |
|
* For simplicity, even though this is highly redundant, each |
|
* line_log_data owns its 'path'. |
|
*/ |
|
struct line_log_data { |
|
struct line_log_data *next; |
|
char *path; |
|
char status; |
|
struct range_set ranges; |
|
int arg_alloc, arg_nr; |
|
const char **args; |
|
struct diff_filepair *pair; |
|
struct diff_ranges diff; |
|
}; |
|
|
|
extern void line_log_init(struct rev_info *rev, const char *prefix, struct string_list *args); |
|
|
|
extern int line_log_filter(struct rev_info *rev); |
|
|
|
extern int line_log_print(struct rev_info *rev, struct commit *commit); |
|
|
|
#endif /* LINE_LOG_H */
|
|
|