Blame line-log.h

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