From: Michael Haggerty <mhagger@alum.mit.edu>
To: Karthik Nayak <karthik.188@gmail.com>
Cc: Git <git@vger.kernel.org>,
Christian Couder <christian.couder@gmail.com>,
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>,
Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v13 05/12] ref-filter: add option to filter out tags, branches and remotes
Date: Thu, 27 Aug 2015 17:24:17 +0200 [thread overview]
Message-ID: <55DF2BA1.2020107@alum.mit.edu> (raw)
In-Reply-To: <CAOLa=ZQh0MNwjAOLameh1f22LB=JyD7=FeROzDRikpoRXse7cw@mail.gmail.com>
On 08/27/2015 02:42 PM, Karthik Nayak wrote:
> On Wed, Aug 26, 2015 at 9:40 PM, Michael Haggerty <mhagger@alum.mit.edu> wrote:
>> On 08/22/2015 05:39 AM, Karthik Nayak wrote:
>>> [...]
>>> + if (type == FILTER_REFS_BRANCHES)
>>> + ret = for_each_reftype_fullpath(ref_filter_handler, "refs/heads/", broken, &ref_cbdata);
>>> + else if (type == FILTER_REFS_REMOTES)
>>> + ret = for_each_reftype_fullpath(ref_filter_handler, "refs/remotes/", broken, &ref_cbdata);
>>> + else if (type == FILTER_REFS_TAGS)
>>> + ret = for_each_reftype_fullpath(ref_filter_handler, "refs/tags/", broken, &ref_cbdata);
>>> + else if (type & FILTER_REFS_ALL) {
>>> + ret = for_each_reftype_fullpath(ref_filter_handler, "", broken, &ref_cbdata);
>>> + if (type & FILTER_REFS_DETACHED_HEAD)
>>> + head_ref(ref_filter_handler, &ref_cbdata);
>>
>> The usual promise of the for_each_ref functions is that they stop
>> iterating if the function ever returns a nonzero value. So the above
>> should be
>>
>> if (! ret && (type & FILTER_REFS_DETACHED_HEAD))
>> ret = head_ref(ref_filter_handler, &ref_cbdata);
>>
>> Also, these functions usually iterate in lexicographic order, so I think
>> you should process HEAD before the others.
>
> This is done on purpose, cause we need to print the HEAD ref separately
> so we print the last ref_array_item in the ref_array, free that memory and
> sort and print the rest, hence HEAD ref is attached to the last.
Without having looked at the other patches, this makes me wonder whether
it makes sense to store HEAD in the ref_array at all or whether it
should be handled separately.
>> But there's another problem here. It seems like
>> FILTER_REFS_DETACHED_HEAD is only processed if (type & FILTER_REFS_ALL)
>> is nonzero. But shouldn't it be allowed to process *only* HEAD?
>>
>> So, finally, I think this code should look like
>>
>> else if (!filter->kind)
>> die("filter_refs: invalid type");
>> else {
>> if (filter->kind & FILTER_REFS_DETACHED_HEAD)
>> ret = head_ref(ref_filter_handler, &ref_cbdata);
>> if (! ret && (filter->kind & FILTER_REFS_ALL))
>> ret =
>> for_each_reftype_fullpath(ref_filter_handler, "", broken, &ref_cbdata);
>> }
>>
>
> So finally something like this perhaps
>
> if (!filter->kind)
> die("filter_refs: invalid type");
> else {
> if (filter->kind == FILTER_REFS_BRANCHES)
> ret = for_each_reftype_fullpath(ref_filter_handler,
> "refs/heads/", broken, &ref_cbdata);
> else if (filter->kind == FILTER_REFS_REMOTES)
> ret = for_each_reftype_fullpath(ref_filter_handler,
> "refs/remotes/", broken, &ref_cbdata);
> else if (filter->kind == FILTER_REFS_TAGS)
> ret = for_each_reftype_fullpath(ref_filter_handler,
> "refs/tags/", broken, &ref_cbdata);
> else if (filter->kind & FILTER_REFS_ALL)
> ret = for_each_reftype_fullpath(ref_filter_handler, "",
> broken, &ref_cbdata);
> if (filter->kind & FILTER_REFS_DETACHED_HEAD)
> head_ref(ref_filter_handler, &ref_cbdata);
> }
Yes, but the last test should be
if (!ret && (filter->kind & FILTER_REFS_DETACHED_HEAD))
unless you have a reason not to follow the usual convention that a
nonzero return value from fn means that the iteration should be aborted.
Michael
--
Michael Haggerty
mhagger@alum.mit.edu
next prev parent reply other threads:[~2015-08-27 15:24 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-22 3:39 [PATCH v13 00/12] port tag.c to use ref-filter APIs Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 01/12] ref-filter: move `struct atom_value` to ref-filter.c Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 02/12] ref-filter: introduce ref_formatting_state and ref_formatting_stack Karthik Nayak
2015-08-24 21:56 ` Junio C Hamano
2015-08-25 10:26 ` Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 03/12] utf8: add function to align a string into given strbuf Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 04/12] ref-filter: implement an `align` atom Karthik Nayak
2015-08-24 22:13 ` Junio C Hamano
2015-08-24 22:15 ` Junio C Hamano
2015-08-25 13:28 ` Karthik Nayak
2015-08-25 6:47 ` Matthieu Moy
2015-08-25 13:30 ` Karthik Nayak
2015-08-25 17:56 ` Junio C Hamano
2015-08-26 6:41 ` Karthik Nayak
2015-08-25 17:52 ` Junio C Hamano
2015-08-25 13:28 ` Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 05/12] ref-filter: add option to filter out tags, branches and remotes Karthik Nayak
2015-08-24 22:24 ` Junio C Hamano
2015-08-25 13:07 ` Karthik Nayak
2015-08-26 16:10 ` Michael Haggerty
2015-08-27 12:42 ` Karthik Nayak
2015-08-27 15:24 ` Michael Haggerty [this message]
2015-08-27 15:35 ` Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 06/12] ref-filter: support printing N lines from tag annotation Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 07/12] ref-filter: add support to sort by version Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 08/12] ref-filter: add option to match literal pattern Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 09/12] tag.c: use 'ref-filter' data structures Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 10/12] tag.c: use 'ref-filter' APIs Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 11/12] tag.c: implement '--format' option Karthik Nayak
2015-08-23 19:56 ` Matthieu Moy
2015-08-24 15:07 ` Karthik Nayak
2015-08-24 15:14 ` Matthieu Moy
2015-08-24 15:21 ` Karthik Nayak
2015-08-22 3:39 ` [PATCH v13 12/12] tag.c: implement '--merged' and '--no-merged' options Karthik Nayak
2015-08-23 20:00 ` [PATCH v13 00/12] port tag.c to use ref-filter APIs Matthieu Moy
2015-08-24 15:09 ` Karthik Nayak
2015-08-24 15:16 ` Matthieu Moy
2015-08-24 15:22 ` Karthik Nayak
2015-08-24 22:34 ` Junio C Hamano
2015-08-24 22:58 ` Junio C Hamano
2015-08-25 13:26 ` Karthik Nayak
2015-08-25 19:16 ` Junio C Hamano
2015-08-25 19:43 ` Junio C Hamano
2015-08-26 5:56 ` Karthik Nayak
2015-08-26 14:37 ` Junio C Hamano
2015-08-26 19:14 ` Karthik Nayak
2015-08-26 20:19 ` Junio C Hamano
2015-08-27 18:00 ` Karthik Nayak
2015-08-25 13:23 ` Karthik Nayak
2015-08-24 17:27 ` Junio C Hamano
2015-08-24 18:09 ` Karthik Nayak
2015-08-24 18:53 ` Junio C Hamano
2015-08-24 22:35 ` Junio C Hamano
2015-08-26 10:07 ` Karthik Nayak
2015-08-26 11:54 ` Matthieu Moy
2015-08-26 15:44 ` Junio C Hamano
2015-08-26 15:46 ` Junio C Hamano
2015-08-26 15:48 ` Matthieu Moy
2015-08-26 19:11 ` Karthik Nayak
2015-08-25 13:25 ` 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=55DF2BA1.2020107@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=karthik.188@gmail.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).