diff options
author | Karthik Nayak <karthik.188@gmail.com> | 2015-06-14 01:07:28 +0530 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-08-03 10:24:07 -0700 |
commit | 14de7fba3462aa8051bc63260fc6407aa51b8f68 (patch) | |
tree | 79e98f99403fa32307c567bbf6ebb1ad55df5736 /builtin/for-each-ref.c | |
parent | c95b758587021a0ee1a27836e7d4ce3f7d634f36 (diff) | |
download | git-14de7fba3462aa8051bc63260fc6407aa51b8f68.tar.gz |
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>
Diffstat (limited to 'builtin/for-each-ref.c')
-rw-r--r-- | builtin/for-each-ref.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c index 637fc4ad9f..7919206187 100644 --- a/builtin/for-each-ref.c +++ b/builtin/for-each-ref.c @@ -16,7 +16,8 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix) const char *format = "%(objectname) %(objecttype)\t%(refname)"; struct ref_sorting *sorting = NULL, **sorting_tail = &sorting; int maxcount = 0, quote_style = 0; - struct ref_filter_cbdata ref_cbdata; + struct ref_array array; + struct ref_filter filter; struct option opts[] = { OPT_BIT('s', "shell", "e_style, @@ -54,16 +55,16 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix) /* for warn_ambiguous_refs */ git_config(git_default_config, NULL); - memset(&ref_cbdata, 0, sizeof(ref_cbdata)); - ref_cbdata.filter.name_patterns = argv; - for_each_rawref(ref_filter_handler, &ref_cbdata); + memset(&array, 0, sizeof(array)); + memset(&filter, 0, sizeof(filter)); + filter.name_patterns = argv; + filter_refs(&array, &filter, FILTER_REFS_ALL | FILTER_REFS_INCLUDE_BROKEN); + ref_array_sort(sorting, &array); - ref_array_sort(sorting, &ref_cbdata.array); - - if (!maxcount || ref_cbdata.array.nr < maxcount) - maxcount = ref_cbdata.array.nr; + if (!maxcount || array.nr < maxcount) + maxcount = array.nr; for (i = 0; i < maxcount; i++) - show_ref_array_item(ref_cbdata.array.items[i], format, quote_style); - ref_array_clear(&ref_cbdata.array); + show_ref_array_item(array.items[i], format, quote_style); + ref_array_clear(&array); return 0; } |