On Wed, Jun 6, 2018 at 12:27 PM, Ævar Arnfjörð Bjarmason
<[email protected]> wrote:
> +This setting changes that to `O(1)`, but with the trade-off that
> +depending on the value of `core.abbrev` way may be printing
s/way may be printing/we may be printing/
> +abbreviated hashes that collide. Too see how likely this is, try
s/Too see/To see/
> +running:
[...]
> +Even without `core.validateAbbrev=false` the results abbreviation
> +already a bit of a probability game.
s/the results abbreviation already a bit of/the resulting abbreviation
is already a bit of/ maybe?
> diff --git a/sha1-name.c b/sha1-name.c
> index 60d9ef3c7e..aa7ccea14d 100644
> --- a/sha1-name.c
> +++ b/sha1-name.c
> @@ -576,6 +576,7 @@ int find_unique_abbrev_r(char *hex, const struct
> object_id *oid, int len)
> struct disambiguate_state ds;
> struct min_abbrev_data mad;
> struct object_id oid_ret;
> + int dar = default_abbrev_relative;
> if (len < 0) {
> unsigned long count = approximate_object_count();
> /*
> @@ -602,6 +603,20 @@ int find_unique_abbrev_r(char *hex, const struct
> object_id *oid, int len)
> if (len == GIT_SHA1_HEXSZ || !len)
> return GIT_SHA1_HEXSZ;
>
> + if (dar) {
> + if (len + dar < MINIMUM_ABBREV) {
> + len = MINIMUM_ABBREV;
> + dar = 0;
> + }
> +
> + if (validate_abbrev) {
> + len += dar;
> + } else {
> + hex[len + dar] = 0;
> + return len + dar;
> + }
I wonder what happens if len + dar > GIT_SHA1_HEXSZ
> + }