From 14de7fba3462aa8051bc63260fc6407aa51b8f68 Mon Sep 17 00:00:00 2001 From: Karthik Nayak Date: Sun, 14 Jun 2015 01:07:28 +0530 Subject: 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 Mentored-by: Christian Couder Mentored-by: Matthieu Moy Signed-off-by: Karthik Nayak Reviewed-by: Matthieu Moy Signed-off-by: Junio C Hamano --- ref-filter.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'ref-filter.h') diff --git a/ref-filter.h b/ref-filter.h index 506ac8f359..697b609064 100644 --- a/ref-filter.h +++ b/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 */ -- cgit v1.2.3