for-each-ref: introduce filter_refs()
Introduce filter_refs() which will act as an API for filtering a set of refs. Based on the type of refs the user has requested, we iterate through those refs and apply filters as per the given ref_filter structure and finally store the filtered refs in the ref_array structure. Currently this will wrap around ref_filter_handler(). Hence, ref_filter_handler is made file scope static. As users of this API will no longer send a ref_filter_cbdata structure directly, we make the elements of ref_filter_cbdata pointers. We can now use the information given by the users to obtain our own ref_filter_cbdata structure. Changes are made to support the change in ref_filter_cbdata structure. Make 'for-each-ref' use this API. Helped-by: Junio C Hamano <gitster@pobox.com> Mentored-by: Christian Couder <christian.couder@gmail.com> Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Reviewed-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
c95b758587
commit
14de7fba34
16
ref-filter.h
16
ref-filter.h
@ -13,6 +13,9 @@
|
||||
#define QUOTE_PYTHON 4
|
||||
#define QUOTE_TCL 8
|
||||
|
||||
#define FILTER_REFS_INCLUDE_BROKEN 0x1
|
||||
#define FILTER_REFS_ALL 0x2
|
||||
|
||||
struct atom_value {
|
||||
const char *s;
|
||||
unsigned long ul; /* used for sorting when not FIELD_STR */
|
||||
@ -42,12 +45,17 @@ struct ref_filter {
|
||||
};
|
||||
|
||||
struct ref_filter_cbdata {
|
||||
struct ref_array array;
|
||||
struct ref_filter filter;
|
||||
struct ref_array *array;
|
||||
struct ref_filter *filter;
|
||||
};
|
||||
|
||||
/* Callback function for for_each_*ref(). This filters the refs based on the filters set */
|
||||
int ref_filter_handler(const char *refname, const struct object_id *oid, int flag, void *cb_data);
|
||||
/*
|
||||
* API for filtering a set of refs. Based on the type of refs the user
|
||||
* has requested, we iterate through those refs and apply filters
|
||||
* as per the given ref_filter structure and finally store the
|
||||
* filtered refs in the ref_array structure.
|
||||
*/
|
||||
int filter_refs(struct ref_array *array, struct ref_filter *filter, unsigned int type);
|
||||
/* Clear all memory allocated to ref_array */
|
||||
void ref_array_clear(struct ref_array *array);
|
||||
/* Parse format string and sort specifiers */
|
||||
|
Reference in New Issue
Block a user