Browse Source

ref-filter: make ref_array_item allocation more consistent

We have a helper function to allocate ref_array_item
structs, but it only takes a subset of the possible fields
in the struct as initializers. We could have it accept an
argument for _every_ field, but that becomes a pain for the
fields which some callers don't want to set initially.

Instead, let's be explicit that it takes only the minimum
required to create the ref, and that callers should then
fill in the rest themselves.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 7 years ago committed by Junio C Hamano
parent
commit
0ffaa00f45
  1. 18
      ref-filter.c

18
ref-filter.c

@ -1824,15 +1824,18 @@ static const struct object_id *match_points_at(struct oid_array *points_at,
return NULL; return NULL;
} }


/* Allocate space for a new ref_array_item and copy the objectname and flag to it */ /*
* Allocate space for a new ref_array_item and copy the name and oid to it.
*
* Callers can then fill in other struct members at their leisure.
*/
static struct ref_array_item *new_ref_array_item(const char *refname, static struct ref_array_item *new_ref_array_item(const char *refname,
const struct object_id *oid, const struct object_id *oid)
int flag)
{ {
struct ref_array_item *ref; struct ref_array_item *ref;

FLEX_ALLOC_STR(ref, refname, refname); FLEX_ALLOC_STR(ref, refname, refname);
oidcpy(&ref->objectname, oid); oidcpy(&ref->objectname, oid);
ref->flag = flag;


return ref; return ref;
} }
@ -1927,12 +1930,13 @@ static int ref_filter_handler(const char *refname, const struct object_id *oid,
* to do its job and the resulting list may yet to be pruned * to do its job and the resulting list may yet to be pruned
* by maxcount logic. * by maxcount logic.
*/ */
ref = new_ref_array_item(refname, oid, flag); ref = new_ref_array_item(refname, oid);
ref->commit = commit; ref->commit = commit;
ref->flag = flag;
ref->kind = kind;


REALLOC_ARRAY(ref_cbdata->array->items, ref_cbdata->array->nr + 1); REALLOC_ARRAY(ref_cbdata->array->items, ref_cbdata->array->nr + 1);
ref_cbdata->array->items[ref_cbdata->array->nr++] = ref; ref_cbdata->array->items[ref_cbdata->array->nr++] = ref;
ref->kind = kind;
return 0; return 0;
} }


@ -2169,7 +2173,7 @@ void pretty_print_ref(const char *name, const struct object_id *oid,
const struct ref_format *format) const struct ref_format *format)
{ {
struct ref_array_item *ref_item; struct ref_array_item *ref_item;
ref_item = new_ref_array_item(name, oid, 0); ref_item = new_ref_array_item(name, oid);
ref_item->kind = ref_kind_from_refname(name); ref_item->kind = ref_kind_from_refname(name);
show_ref_array_item(ref_item, format); show_ref_array_item(ref_item, format);
free_array_item(ref_item); free_array_item(ref_item);

Loading…
Cancel
Save