Derrick Stolee <dstolee@xxxxxxxxxxxxx> 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.