зеркало из https://github.com/microsoft/git.git
range-set: publish API for re-use by git-blame -L
git-blame is slated to accept multiple -L ranges. git-log already accepts multiple -L's but its implementation of range-set, which organizes and normalizes -L ranges, is private. Publish the small subset of range-set API which is needed for git-blame multiple -L support. Signed-off-by: Eric Sunshine <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
0ddd47193c
Коммит
c0babbe695
10
line-log.c
10
line-log.c
|
@ -23,7 +23,7 @@ static void range_set_grow(struct range_set *rs, size_t extra)
|
||||||
/* Either initialization would be fine */
|
/* Either initialization would be fine */
|
||||||
#define RANGE_SET_INIT {0}
|
#define RANGE_SET_INIT {0}
|
||||||
|
|
||||||
static void range_set_init(struct range_set *rs, size_t prealloc)
|
void range_set_init(struct range_set *rs, size_t prealloc)
|
||||||
{
|
{
|
||||||
rs->alloc = rs->nr = 0;
|
rs->alloc = rs->nr = 0;
|
||||||
rs->ranges = NULL;
|
rs->ranges = NULL;
|
||||||
|
@ -31,7 +31,7 @@ static void range_set_init(struct range_set *rs, size_t prealloc)
|
||||||
range_set_grow(rs, prealloc);
|
range_set_grow(rs, prealloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void range_set_release(struct range_set *rs)
|
void range_set_release(struct range_set *rs)
|
||||||
{
|
{
|
||||||
free(rs->ranges);
|
free(rs->ranges);
|
||||||
rs->alloc = rs->nr = 0;
|
rs->alloc = rs->nr = 0;
|
||||||
|
@ -56,7 +56,7 @@ static void range_set_move(struct range_set *dst, struct range_set *src)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* tack on a _new_ range _at the end_ */
|
/* tack on a _new_ range _at the end_ */
|
||||||
static void range_set_append_unsafe(struct range_set *rs, long a, long b)
|
void range_set_append_unsafe(struct range_set *rs, long a, long b)
|
||||||
{
|
{
|
||||||
assert(a <= b);
|
assert(a <= b);
|
||||||
range_set_grow(rs, 1);
|
range_set_grow(rs, 1);
|
||||||
|
@ -65,7 +65,7 @@ static void range_set_append_unsafe(struct range_set *rs, long a, long b)
|
||||||
rs->nr++;
|
rs->nr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void range_set_append(struct range_set *rs, long a, long b)
|
void range_set_append(struct range_set *rs, long a, long b)
|
||||||
{
|
{
|
||||||
assert(rs->nr == 0 || rs->ranges[rs->nr-1].end <= a);
|
assert(rs->nr == 0 || rs->ranges[rs->nr-1].end <= a);
|
||||||
range_set_append_unsafe(rs, a, b);
|
range_set_append_unsafe(rs, a, b);
|
||||||
|
@ -107,7 +107,7 @@ static void range_set_check_invariants(struct range_set *rs)
|
||||||
* In-place pass of sorting and merging the ranges in the range set,
|
* In-place pass of sorting and merging the ranges in the range set,
|
||||||
* to establish the invariants when we get the ranges from the user
|
* to establish the invariants when we get the ranges from the user
|
||||||
*/
|
*/
|
||||||
static void sort_and_merge_range_set(struct range_set *rs)
|
void sort_and_merge_range_set(struct range_set *rs)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int o = 0; /* output cursor */
|
int o = 0; /* output cursor */
|
||||||
|
|
12
line-log.h
12
line-log.h
|
@ -25,6 +25,18 @@ struct diff_ranges {
|
||||||
struct range_set target;
|
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
|
/* Linked list of interesting files and their associated ranges. The
|
||||||
* list must be kept sorted by path.
|
* list must be kept sorted by path.
|
||||||
*
|
*
|
||||||
|
|
Загрузка…
Ссылка в новой задаче