Skip to content

Commit a1b19aa

Browse files
alipman88gitster
authored andcommitted
ref-filter: make internal reachable-filter API more precise
The internal reachable-filter API is a bit loose and imprecise; it also bleeds unnecessarily into the public header. Tighten the API by: * renaming do_merge_filter() to reach_filter() * separating parameters to explicitly identify what data is used by the function instead of passing an entire ref_filter_cbdata struct * renaming and moving internal constants from header to source file Signed-off-by: Aaron Lipman <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 21bf933 commit a1b19aa

File tree

2 files changed

+14
-18
lines changed

2 files changed

+14
-18
lines changed

ref-filter.c

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2231,19 +2231,18 @@ void ref_array_clear(struct ref_array *array)
22312231
}
22322232
}
22332233

2234-
static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata, int reachable)
2234+
#define EXCLUDE_REACHED 0
2235+
#define INCLUDE_REACHED 1
2236+
static void reach_filter(struct ref_array *array,
2237+
struct commit_list *check_reachable,
2238+
int include_reached)
22352239
{
22362240
struct rev_info revs;
22372241
int i, old_nr;
2238-
struct ref_array *array = ref_cbdata->array;
22392242
struct commit **to_clear = xcalloc(sizeof(struct commit *), array->nr);
2240-
struct commit_list *rl;
2243+
struct commit_list *cr;
22412244

2242-
struct commit_list *check_reachable_list = reachable ?
2243-
ref_cbdata->filter->reachable_from :
2244-
ref_cbdata->filter->unreachable_from;
2245-
2246-
if (!check_reachable_list)
2245+
if (!check_reachable)
22472246
return;
22482247

22492248
repo_init_revisions(the_repository, &revs, NULL);
@@ -2254,8 +2253,8 @@ static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata, int reachable)
22542253
to_clear[i] = item->commit;
22552254
}
22562255

2257-
for (rl = check_reachable_list; rl; rl = rl->next) {
2258-
struct commit *merge_commit = rl->item;
2256+
for (cr = check_reachable; cr; cr = cr->next) {
2257+
struct commit *merge_commit = cr->item;
22592258
merge_commit->object.flags |= UNINTERESTING;
22602259
add_pending_object(&revs, &merge_commit->object, "");
22612260
}
@@ -2273,16 +2272,16 @@ static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata, int reachable)
22732272

22742273
int is_merged = !!(commit->object.flags & UNINTERESTING);
22752274

2276-
if (is_merged == reachable)
2275+
if (is_merged == include_reached)
22772276
array->items[array->nr++] = array->items[i];
22782277
else
22792278
free_array_item(item);
22802279
}
22812280

22822281
clear_commit_marks_many(old_nr, to_clear, ALL_REV_FLAGS);
22832282

2284-
while (check_reachable_list) {
2285-
struct commit *merge_commit = pop_commit(&check_reachable_list);
2283+
while (check_reachable) {
2284+
struct commit *merge_commit = pop_commit(&check_reachable);
22862285
clear_commit_marks(merge_commit, ALL_REV_FLAGS);
22872286
}
22882287

@@ -2337,8 +2336,8 @@ int filter_refs(struct ref_array *array, struct ref_filter *filter, unsigned int
23372336
clear_contains_cache(&ref_cbdata.no_contains_cache);
23382337

23392338
/* Filters that need revision walking */
2340-
do_merge_filter(&ref_cbdata, DO_MERGE_FILTER_REACHABLE);
2341-
do_merge_filter(&ref_cbdata, DO_MERGE_FILTER_UNREACHABLE);
2339+
reach_filter(array, filter->reachable_from, INCLUDE_REACHED);
2340+
reach_filter(array, filter->unreachable_from, EXCLUDE_REACHED);
23422341

23432342
return ret;
23442343
}

ref-filter.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@
2323
#define FILTER_REFS_DETACHED_HEAD 0x0020
2424
#define FILTER_REFS_KIND_MASK (FILTER_REFS_ALL | FILTER_REFS_DETACHED_HEAD)
2525

26-
#define DO_MERGE_FILTER_UNREACHABLE 0
27-
#define DO_MERGE_FILTER_REACHABLE 1
28-
2926
struct atom_value;
3027

3128
struct ref_sorting {

0 commit comments

Comments
 (0)