зеркало из https://github.com/microsoft/git.git
Merge branch 'jk/ref-array-push'
API clean-up aournd ref-filter code. * jk/ref-array-push: ref-filter: factor ref_array pushing into its own function ref-filter: make ref_array_item allocation more consistent ref-filter: use "struct object_id" consistently
This commit is contained in:
Коммит
b3d6c48c5f
|
@ -118,7 +118,7 @@ static int verify_tag(const char *name, const char *ref,
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (format->format)
|
if (format->format)
|
||||||
pretty_print_ref(name, oid->hash, format);
|
pretty_print_ref(name, oid, format);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (format.format)
|
if (format.format)
|
||||||
pretty_print_ref(name, oid.hash, &format);
|
pretty_print_ref(name, &oid, &format);
|
||||||
}
|
}
|
||||||
return had_error;
|
return had_error;
|
||||||
}
|
}
|
||||||
|
|
36
ref-filter.c
36
ref-filter.c
|
@ -1828,15 +1828,30 @@ 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 unsigned char *objectname,
|
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);
|
||||||
hashcpy(ref->objectname.hash, objectname);
|
oidcpy(&ref->objectname, oid);
|
||||||
ref->flag = flag;
|
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ref_array_item *ref_array_push(struct ref_array *array,
|
||||||
|
const char *refname,
|
||||||
|
const struct object_id *oid)
|
||||||
|
{
|
||||||
|
struct ref_array_item *ref = new_ref_array_item(refname, oid);
|
||||||
|
|
||||||
|
ALLOC_GROW(array->items, array->nr + 1, array->alloc);
|
||||||
|
array->items[array->nr++] = ref;
|
||||||
|
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
@ -1931,12 +1946,11 @@ 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->hash, flag);
|
ref = ref_array_push(ref_cbdata->array, refname, oid);
|
||||||
ref->commit = commit;
|
ref->commit = commit;
|
||||||
|
ref->flag = flag;
|
||||||
REALLOC_ARRAY(ref_cbdata->array->items, ref_cbdata->array->nr + 1);
|
|
||||||
ref_cbdata->array->items[ref_cbdata->array->nr++] = ref;
|
|
||||||
ref->kind = kind;
|
ref->kind = kind;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2169,11 +2183,11 @@ void show_ref_array_item(struct ref_array_item *info,
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
void pretty_print_ref(const char *name, const unsigned char *sha1,
|
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, sha1, 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);
|
||||||
|
|
10
ref-filter.h
10
ref-filter.h
|
@ -132,7 +132,15 @@ void setup_ref_filter_porcelain_msg(void);
|
||||||
* Print a single ref, outside of any ref-filter. Note that the
|
* Print a single ref, outside of any ref-filter. Note that the
|
||||||
* name must be a fully qualified refname.
|
* name must be a fully qualified refname.
|
||||||
*/
|
*/
|
||||||
void pretty_print_ref(const char *name, const unsigned char *sha1,
|
void pretty_print_ref(const char *name, const struct object_id *oid,
|
||||||
const struct ref_format *format);
|
const struct ref_format *format);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Push a single ref onto the array; this can be used to construct your own
|
||||||
|
* ref_array without using filter_refs().
|
||||||
|
*/
|
||||||
|
struct ref_array_item *ref_array_push(struct ref_array *array,
|
||||||
|
const char *refname,
|
||||||
|
const struct object_id *oid);
|
||||||
|
|
||||||
#endif /* REF_FILTER_H */
|
#endif /* REF_FILTER_H */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче