Re: [PATCH v2 3/3] bisect: combine args passed to find_bisection()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 30, 2020, 04:32 UTC
- Message-ID
- <xmqqr1st7hdd.fsf@gitster.c.googlers.com>
- In-Reply-To
- <20200730002735.87655-4-alipman88@gmail.com>
Aaron Lipman <alipman88@gmail.com> writes:
> Now that find_bisection() accepts multiple boolean arguments, these may > be combined into a single unsigned integer in order to declutter some of > the code in bisect.c
I'd rather call them "flags" without "bisect_". If we are passing two sets of flags, one set about "bisect" and the other set about something else, it would make quite a lot of sense to call the first set "bisect_flags", but what we are seeing here is not like that.
Show 6 quoted lines
> + if (read_first_parent_option()) > + bisect_flags |= BISECT_FIRST_PARENT; > + > + if (!!skipped_revs.nr) > + bisect_flags |= BISECT_FIND_ALL; > +
You do not care what kind of "true" you are feeding "if()", so I do not think you would want to keep !! prefix here. Older API into find_bisection() may wanted to say "pass 1 to find_all", in which case, normalizing with !! prefix may have made perfect sense, but that no longer holds here.
> + > + revs.first_parent_only = !!(bisect_flags & BISECT_FIRST_PARENT);
On the other hand, this !! may make sense; especially since .first_parent_only could just be a one-bit unsigned bitfield.
Show 6 quoted lines
> revs.limited = 1; > > bisect_common(&revs); > > - find_bisection(&revs.commits, &reaches, &all, !!skipped_revs.nr, first_parent_only); > + find_bisection(&revs.commits, &reaches, &all, bisect_flags);
Show 6 quoted lines
> @@ -23,6 +23,9 @@ struct commit_list *filter_skipped(struct commit_list *list, > #define BISECT_SHOW_ALL (1<<0) > #define REV_LIST_QUIET (1<<1) > > +#define BISECT_FIND_ALL (1u<<0) > +#define BISECT_FIRST_PARENT (1u<<1)
The set of bits to go to your "bisect_flags" are only these two new ones, and the existing BISECT_SHOW_ALL does not belong to it (it is a bit in rev_list_info.flags), but it is not apparent. I wonder if there is a good way to help readers easily tell these two sets apart. These are flags passed to find_bisection(), so perhaps
#define FIND_BISECTION_ALL (1U<<0)
#define FIND_BISECTION_FIRST_PARENT_ONLY (1U<<1) unsigned flags = 0;
if (first_parent)
flags |= FIND_BISECTION_FIRST_PARENT_ONLY;
...
find_bisection(..., flags);would be a reasonable compromise?
Thanks.