abbrev: prepare for new world order

The code that sets custom abbreviation length, in response to command line argument, often does something like this: if (skip_prefix(arg, "--abbrev=", &arg)) abbrev = atoi(arg); else if (!strcmp("--abbrev", &arg)) abbrev = DEFAULT_ABBREV; /* make the value sane */ if (abbrev < 0 || 40 < abbrev) abbrev = ... some sane value ... However, it is pointless to sanity-check and tweak the value obtained from DEFAULT_ABBREV. We are going to allow it to be initially set to -1 to signal that the default abbreviation length must be auto sized upon the first request to abbreviate, based on the number of objects in the repository, and when that happens, rejecting or tweaking a negative value to a "saner" one will negatively interfere with the auto sizing. The codepaths for git rev-parse --short <object> git diff --raw --abbrev do exactly that; allow them to pass possibly negative abbrevs intact, that will come from DEFAULT_ABBREV in the future. Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed Sep 30, 2016 at 17:19 UTC 7b5b7721affae7040cac77d647a5ec8628f0f845
2 files changed +4 -3
builtin/rev-parse.c
+3 -2
@@ -643,8 +643,9 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
643 filter &= ~(DO_FLAGS|DO_NOREV);
644 verify = 1;
645 abbrev = DEFAULT_ABBREV;
646 - if (arg[7] == '=')
647 - abbrev = strtoul(arg + 8, NULL, 10);
646 + if (!arg[7])
647 + continue;
648 + abbrev = strtoul(arg + 8, NULL, 10);
649 if (abbrev < MINIMUM_ABBREV)
650 abbrev = MINIMUM_ABBREV;
651 else if (40 <= abbrev)
diff.c
+1 -1
@@ -3399,7 +3399,7 @@ void diff_setup_done(struct diff_options *options)
3399 */
3400 read_cache();
3401 }
3402 - if (options->abbrev <= 0 || 40 < options->abbrev)
3402 + if (40 < options->abbrev)
3403 options->abbrev = 40; /* full */
3404
3405 /*