Jeff King <peff@xxxxxxxx> writes: > On Fri, Sep 30, 2016 at 05:19:37PM -0700, Junio C Hamano wrote: > >> Introduce a mechanism, where we estimate the number of objects in >> the repository upon the first request to abbreviate an object name >> with the default setting and come up with a sane default for the >> repository. Based on the expectation that we would see collision in >> a repository with 2^(2N) objects when using object names shortened >> to first N bits, use sufficient number of hexdigits to cover the >> number of objects in the repository. Each hexdigit (4-bits) we add >> to the shortened name allows us to have four times (2-bits) as many >> objects in the repository. I was idly browsing the draft release notes and then documentation and noticed that, even though the new default is to auto-scale, there is no mention of that in the documentation and there is no way to explicitly ask for auto-scaling. I wonder if we want to have something like this. I actually am inclined to drop the change to config.c and remove the new mention of "auto" in the documentation. Documentation/config.txt | 9 +++++---- config.c | 14 ++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index a0ab66aae7..b02f8a4025 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -783,10 +783,11 @@ core.sparseCheckout:: linkgit:git-read-tree[1] for more information. core.abbrev:: - Set the length object names are abbreviated to. If unspecified, - many commands abbreviate to 7 hexdigits, which may not be enough - for abbreviated object names to stay unique for sufficiently long - time. + Set the length object names are abbreviated to. If + unspecified or set to "auto", an appropriate value is + computed based on the approximate number of packed objects + in your repository, which hopefully is enough for + abbreviated object names to stay unique for some time. add.ignoreErrors:: add.ignore-errors (deprecated):: diff --git a/config.c b/config.c index 83fdecb1bc..c363cca4a9 100644 --- a/config.c +++ b/config.c @@ -834,10 +834,16 @@ static int git_default_core_config(const char *var, const char *value) } if (!strcmp(var, "core.abbrev")) { - int abbrev = git_config_int(var, value); - if (abbrev < minimum_abbrev || abbrev > 40) - return -1; - default_abbrev = abbrev; + if (!value) + return config_error_nonbool(var); + if (!strcasecmp(value, "auto")) + default_abbrev = -1; + else { + int abbrev = git_config_int(var, value); + if (abbrev < minimum_abbrev || abbrev > 40) + return -1; + default_abbrev = abbrev; + } return 0; }