Re: [PATCH] [GSOC] ref-filter: solve bugs caused by enumeration
- From
Junio C Hamano <gitster@pobox.com>
- Date
- May 7, 2021, 04:49 UTC
- Message-ID
- <xmqq5yzvw3kk.fsf@gitster.g>
- In-Reply-To
- <CAOLTT8QWadP9ovrUC_7m86dKh1PsawUyZ=msK5tx1utTpuCXMQ@mail.gmail.com>
ZheNing Hu <adlternative@gmail.com> writes:
> But I am afraid that the cost we paid for string matching here is too high,
If that is truly the concern (I do not know without measuring), perhaps we should add a member next to the union to say which one of the union members is valid, so that you can say
if (atom->atom_type == ATOM_TYPE_REMOTE_REF &&
atom->u.remote_ref.push)(introduce an enum and define ATOM_TYPE_* after the member in the union).
That would help futureproofing the code even further, as a new synonym of "push" introduced laster [*] would not invalidate the check you are adding there.
[Footnote]
* remote_ref_atom_parser() in the future may begin like so:
- if (!strcmp(atom->name, "push") || starts_with(atom->name, "push:")) + if (!strcmp(atom->name, "push") || starts_with(atom->name, "push:") || + !strcmp(atom->name, "a-synonym-for-push")) atom->u.remote_ref.push = 1;