From: Karthik Nayak <karthik.188@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, christian.couder@gmail.com,
Matthieu.Moy@grenoble-inp.fr
Subject: Re: [WIP/PATCH v4 6/8] for-each-ref: rename some functions and make them public
Date: Mon, 01 Jun 2015 01:04:12 +0530 [thread overview]
Message-ID: <556B6234.2010809@gmail.com> (raw)
In-Reply-To: <xmqqmw0kab94.fsf@gitster.dls.corp.google.com>
On 05/31/2015 11:18 PM, Junio C Hamano wrote:
> Karthik Nayak <karthik.188@gmail.com> writes:
>
>> /*
>> - * A call-back given to for_each_ref(). Filter refs and keep them for
>> + * A call-back given to for_each_ref(). Filter refs and keep them for
>> * later object processing.
>> */
>> -static int grab_single_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
>> +int ref_filter_handler(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
>> {
>
> I am not sure if this is a good external interface, i.e. to expect
> callers of ref-filter API to do this:
>
> prepare cbdata;
> for_each_ref(ref_filter_handler, &cbdata);
>
> It might be better to expect callers to do this instead:
>
> prepare cbdata;
> filter_refs(for_each_ref, &cbdata);
>
> i.e. introducing a new "filter_refs()" function as the entry point
> to the ref-filter API. The filter_refs() entry point may internally
> use ref_filter_handler() that will be file-scope static to ref-filter.c
> and at that point the overly generic "-handler" name would not bother
> anybody ;-) but more importantly, then you can extend the function
> signature of filter_refs() not to be so tied to for_each_ref() API.
> It could be that the internals of cbdata may not be something the
> callers of filter-refs API does not even have to know about, in
> which case the call might even become something like:
>
> struct ref_array refs = REF_ARRAY_INIT;
> const char **ref_patterns = { "refs/heads/*", "refs/tags/*", NULL};
>
> filter_refs(&refs, for_each_rawref, ref_patterns);
>
> /* now "refs" has the result, the caller uses them */
> for (i = 0; i < refs.nr; i++)
> refs.item[i];
>
> Just a thought.
>
Thats brilliant, How about I introduce something of this sort
int filter_refs(int (*for_each_ref_fn)(each_ref_fn, void *),
ref_filter_cbdata *cbdata)
{
return for_each_ref_fn(ref_filter_handler, cbdata);
}
where its the most basic form, and things like
>
> struct ref_array refs = REF_ARRAY_INIT;
> const char **ref_patterns = { "refs/heads/*", "refs/tags/*",
NULL};
>
> filter_refs(&refs, for_each_rawref, ref_patterns);
>
> /* now "refs" has the result, the caller uses them */
> for (i = 0; i < refs.nr; i++)
> refs.item[i];
>
Could be achieved using a simple wrapper around 'filter_refs()'
something like this perhaps.
int filter_refs_with_pattern(struct ref_array *ref, int
(*for_each_ref_fn)(each_ref_fn, void *), char **patterns)
{
int i;
struct ref_filter_cbdata data;
data.filter.name_patterns = patterns;
filter_refs(for_each_ref_fn, &data);
refs->nr = data.array.nr;
for(i = 0; i < refs->nr; i++) {
/* copy over the refs */
}
return 0;
}
Is this on the lines of what you had in mind? If it is, than I could
just create a new patch which would make ref_filter_handler() private
and introduce filter_refs() as shown.
--
Regards,
Karthik
next prev parent reply other threads:[~2015-05-31 19:38 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <5569EF77.4010300@gmail.com>
2015-05-30 17:53 ` [WIP/PATCH v4 1/8] for-each-ref: extract helper functions out of grab_single_ref() Karthik Nayak
2015-05-31 2:58 ` Eric Sunshine
2015-05-31 8:11 ` Karthik Nayak
2015-05-31 17:34 ` Junio C Hamano
2015-05-31 17:48 ` Karthik Nayak
2015-05-31 20:39 ` Matthieu Moy
2015-06-01 14:39 ` Junio C Hamano
2015-05-30 17:53 ` [WIP/PATCH v4 2/8] for-each-ref: simplify code Karthik Nayak
2015-05-30 17:53 ` [WIP/PATCH v4 3/8] for-each-ref: rename 'refinfo' to 'ref_array_item' Karthik Nayak
2015-05-31 17:37 ` Junio C Hamano
2015-05-31 17:48 ` Karthik Nayak
2015-05-30 17:53 ` [WIP/PATCH v4 4/8] for-each-ref: introduce new structures for better organisation Karthik Nayak
2015-05-31 3:14 ` Eric Sunshine
2015-05-31 8:16 ` Karthik Nayak
2015-05-30 17:53 ` [WIP/PATCH v4 5/8] for-each-ref: introduce 'ref_filter_clear_data()' Karthik Nayak
2015-05-31 7:38 ` Christian Couder
2015-05-31 8:20 ` Karthik Nayak
2015-05-30 17:53 ` [WIP/PATCH v4 6/8] for-each-ref: rename some functions and make them public Karthik Nayak
2015-05-31 3:21 ` Eric Sunshine
2015-05-31 8:16 ` Karthik Nayak
2015-05-31 8:04 ` Christian Couder
2015-05-31 8:11 ` Christian Couder
2015-05-31 9:17 ` Karthik Nayak
2015-05-31 14:03 ` Christian Couder
2015-05-31 15:30 ` Karthik Nayak
2015-06-01 6:38 ` Matthieu Moy
2015-06-01 19:28 ` Karthik Nayak
2015-05-31 17:54 ` Junio C Hamano
2015-05-31 17:48 ` Junio C Hamano
2015-05-31 19:34 ` Karthik Nayak [this message]
2015-06-01 14:53 ` Junio C Hamano
2015-06-01 19:35 ` Karthik Nayak
2015-05-30 17:53 ` [WIP/PATCH v4 7/8] ref-filter: move code from 'for-each-ref' Karthik Nayak
2015-05-30 17:53 ` [WIP/PATCH v4 8/8] ref-filter: add 'ref-filter.h' Karthik Nayak
2015-05-31 3:43 ` Eric Sunshine
2015-05-31 8:19 ` Karthik Nayak
2015-05-31 8:29 ` Eric Sunshine
2015-05-31 9:12 ` Karthik Nayak
2015-05-31 20:46 ` Matthieu Moy
2015-05-31 20:50 ` Karthik Nayak
2015-05-31 22:34 ` Christian Couder
2015-06-01 6:47 ` Matthieu Moy
2015-05-31 8:20 ` Christian Couder
2015-05-31 9:16 ` Karthik Nayak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=556B6234.2010809@gmail.com \
--to=karthik.188@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).