Derrick Stolee <dsto...@microsoft.com> 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.

Reply via email to