This patch series implements an entirely alternate method of achieving some of the same ends as the MIDX, using the approach suggested by Jeff King from the RFC thread back in January[1]. You can now do: core.abbrev = 20 core.validateAbbrev = false Or: core.abbrev = +2 core.validateAbbrev = false On linux.git `git log --oneline --raw --parents` with 64MB packs gives this improvement with core.abbrev=15 & core.validateAbbrev=false (v.s. true): Test HEAD~ HEAD ---------------------------------------------------------------------------------------- 0014.1: git log --oneline --raw --parents 95.68(95.07+0.53) 42.74(42.33+0.39) -55.3% While cleaning up the RFC version of this which I sent in [2] I discovered that almost none of the existing functionality was tested for, and was very inconsistent since we have 4 different places where the abbrev config is parsed. See 19/20 and 20/20 for what this whole thing is building towards, the rest is all tests, cleanup, and preparatory work. (There's still other long-standing issues with the existing behavior which this doesn't change, but I had to stop somewhere to make this digestible). 1. https://public-inbox.org/git/20180108102029.GA21232@xxxxxxxxxxxxxxxxxxxxx/ 2. https://public-inbox.org/git/20180606102719.27145-1-avarab@xxxxxxxxx/ Ævar Arnfjörð Bjarmason (20): t/README: clarify the description of test_line_count test library: add a test_byte_count blame doc: explicitly note how --abbrev=40 gives 39 chars abbrev tests: add tests for core.abbrev and --abbrev abbrev tests: test "git-blame" behavior blame: fix a bug, core.abbrev should work like --abbrev abbrev tests: test "git branch" behavior abbrev tests: test for "git-describe" behavior abbrev tests: test for "git-log" behavior abbrev tests: test for "git-diff" behavior abbrev tests: test for plumbing behavior abbrev tests: test for --abbrev and core.abbrev=[+-]N parse-options-cb.c: convert uses of 40 to GIT_SHA1_HEXSZ config.c: use braces on multiple conditional arms parse-options-cb.c: use braces on multiple conditional arms abbrev: unify the handling of non-numeric values abbrev: unify the handling of empty values abbrev parsing: use braces on multiple conditional arms abbrev: support relative abbrev values abbrev: add a core.validateAbbrev setting Documentation/config.txt | 49 +++ Documentation/diff-options.txt | 3 + Documentation/git-blame.txt | 14 + Documentation/git-branch.txt | 3 + Documentation/git-describe.txt | 3 + Documentation/git-ls-files.txt | 3 + Documentation/git-ls-tree.txt | 3 + Documentation/git-show-ref.txt | 3 + builtin/blame.c | 2 + cache.h | 2 + config.c | 22 +- diff.c | 24 +- environment.c | 2 + parse-options-cb.c | 19 +- revision.c | 24 +- sha1-name.c | 15 + t/README | 6 +- t/perf/p0014-abbrev.sh | 13 + t/t0014-abbrev.sh | 452 ++++++++++++++++++++++++++++ t/t1512-rev-parse-disambiguation.sh | 47 +++ t/t6006-rev-list-format.sh | 6 +- t/test-lib-functions.sh | 23 ++ 22 files changed, 722 insertions(+), 16 deletions(-) create mode 100755 t/perf/p0014-abbrev.sh create mode 100755 t/t0014-abbrev.sh -- 2.17.0.290.gded63e768a