Derrick Stolee <[email protected]> writes:
> diff --git a/sha1_name.c b/sha1_name.c
> index f2a1ebe49..5081aeb71 100644
> --- a/sha1_name.c
> +++ b/sha1_name.c
> @@ -480,13 +480,23 @@ struct min_abbrev_data {
> char *hex;
> };
>
> +static inline char get_hex_char_from_oid(const struct object_id *oid,
> + int pos)
> +{
> + static const char hex[] = "0123456789abcdef";
> +
> + if ((pos & 1) == 0)
> + return hex[oid->hash[pos >> 1] >> 4];
> + else
> + return hex[oid->hash[pos >> 1] & 0xf];
> +}
> +
> static int extend_abbrev_len(const struct object_id *oid, void *cb_data)
> {
> struct min_abbrev_data *mad = cb_data;
>
> - char *hex = oid_to_hex(oid);
> unsigned int i = mad->init_len;
> - while (mad->hex[i] && mad->hex[i] == hex[i])
> + while (mad->hex[i] && mad->hex[i] == get_hex_char_from_oid(oid, i))
> i++;
Assuming that [PATCH 3/5] makes sense, it is an obvious optimization
to avoid writing the whole 20-byte out before comparing, and instead
to grab hex digits as they become needed.
I assume that the "Base Time" in the log message was with whatever
version of Git before [PATCH 3/5] and this one were applied
(i.e. not comparing to "vanilla Git plus 3/5")?
Thanks.