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>
Eric Sunshine committed
Aug 6, 2013 at 09:59 UTC
c0babbe6953a8a085f270e98e9a94d2a6f3a381b
2 files changed
+17
-5
line-log.c
+5
-5
@@ -23,7 +23,7 @@ static void range_set_grow(struct range_set *rs, size_t extra)
23
/* Either initialization would be fine */
24
#define RANGE_SET_INIT {0}
25
26
-static void range_set_init(struct range_set *rs, size_t prealloc)
26
+void range_set_init(struct range_set *rs, size_t prealloc)
27
{
28
rs->alloc = rs->nr = 0;
29
rs->ranges = NULL;
@@ -31,7 +31,7 @@ static void range_set_init(struct range_set *rs, size_t prealloc)
31
range_set_grow(rs, prealloc);
32
}
33
34
-static void range_set_release(struct range_set *rs)
34
+void range_set_release(struct range_set *rs)
35
{
36
free(rs->ranges);
37
rs->alloc = rs->nr = 0;
@@ -56,7 +56,7 @@ static void range_set_move(struct range_set *dst, struct range_set *src)
56
}
57
58
/* tack on a _new_ range _at the end_ */
59
-static void range_set_append_unsafe(struct range_set *rs, long a, long b)
59
+void range_set_append_unsafe(struct range_set *rs, long a, long b)
60
{
61
assert(a <= b);
62
range_set_grow(rs, 1);
@@ -65,7 +65,7 @@ static void range_set_append_unsafe(struct range_set *rs, long a, long b)
65
rs->nr++;
66
}
67
68
-static void range_set_append(struct range_set *rs, long a, long b)
68
+void range_set_append(struct range_set *rs, long a, long b)
69
{
70
assert(rs->nr == 0 || rs->ranges[rs->nr-1].end <= a);
71
range_set_append_unsafe(rs, a, b);
@@ -107,7 +107,7 @@ static void range_set_check_invariants(struct range_set *rs)
107
* In-place pass of sorting and merging the ranges in the range set,
108
* to establish the invariants when we get the ranges from the user
109
*/
110
-static void sort_and_merge_range_set(struct range_set *rs)
110
+void sort_and_merge_range_set(struct range_set *rs)
111
{
112
int i;
113
int o = 0; /* output cursor */
line-log.h
+12
@@ -25,6 +25,18 @@ struct diff_ranges {
25
struct range_set target;
26
};
27
28
+extern void range_set_init(struct range_set *, size_t prealloc);
29
+extern void range_set_release(struct range_set *);
30
+/* Range includes start; excludes end */
31
+extern 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
+extern 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
+extern 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
*