Re: [PATCH v2 4/4] object-file: fix a unpack_loose_header() regression in 3b6a8db3b03
- From
Junio C Hamano <gitster@pobox.com>
- Date
- May 12, 2022, 23:39 UTC
- Message-ID
- <xmqqo802codb.fsf@gitster.g>
- In-Reply-To
- <20220512223218.237544-5-gitster@pobox.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 19 quoted lines
> diff --git a/object-file.c b/object-file.c
> index 5ffbf3d4fd..b5d1d12b68 100644
> --- a/object-file.c
> +++ b/object-file.c
> @@ -2623,8 +2623,12 @@ int read_loose_object(const char *path,
> goto out;
> }
>
> - if (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr),
> - NULL) < 0) {
> + switch (unpack_loose_header(&stream, map, mapsize, hdr, sizeof(hdr),
> + NULL)) {
> + case ULHR_OK:
> + break;
> + case ULHR_BAD:
> + case ULHR_TOO_LONG:
> error(_("unable to unpack header of %s"), path);
> goto out;
> }Regarding this hunk, since we only care about a single "did we get any error, or did we unpack OK" bit, I think this should be more like
if (unpack_loose_header(...) != ULHR_OK) {
error(_("unable to..."), path);
goto out;
}It is true, as Ævar mentioned, that there is another place in the same file that uses switch() in loose_object_info(), and it should remain to be switch() on the returned enum because it wants to behave differnetly depending on the kind of error it gets. But that is not a reason to make this part that only cares about a single "did it fail?" into a switch and force future developers to add a useless case arm.
I left it there as posted in the previous round because I was too lazy ;-) and also it is something we can clean up with a follow up patch outside the series. As my today's focus has been to reduce the number of topics waiting for a reroll, I'd rather leave things that are not outright broken but needs clean up as they are for the sake of expediency.
Thanks.