Create helper program test-abbrev to compute the minimum length of a disambiguating short-sha for 100,000 object ids. The ids are created by iterating an unsigned int hash_base by a constant hash_delta and copying hash_base five times across the sha1. Iterating by hash_delta does not create a duplicate value for over 10,000,000 iterations. test-abberv demonstrates the performance improvements that will be shown by later improvements to the find_unique_abberv(). The value of 100,000 is large enough to show the significance of the later improvements while only taking a few seconds on large repos. Signed-off-by: Derrick Stolee <dstolee@xxxxxxxxxxxxx> --- Makefile | 1 + t/helper/.gitignore | 1 + t/helper/test-abbrev.c | 23 +++++++++++++++++++++++ t/perf/p0008-abbrev.sh | 12 ++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 t/helper/test-abbrev.c create mode 100755 t/perf/p0008-abbrev.sh diff --git a/Makefile b/Makefile index f2bb7f2f6..081ca05e8 100644 --- a/Makefile +++ b/Makefile @@ -633,6 +633,7 @@ X = PROGRAMS += $(patsubst %.o,git-%$X,$(PROGRAM_OBJS)) +TEST_PROGRAMS_NEED_X += test-abbrev TEST_PROGRAMS_NEED_X += test-chmtime TEST_PROGRAMS_NEED_X += test-ctype TEST_PROGRAMS_NEED_X += test-config diff --git a/t/helper/.gitignore b/t/helper/.gitignore index 721650256..80ce7d836 100644 --- a/t/helper/.gitignore +++ b/t/helper/.gitignore @@ -1,3 +1,4 @@ +/test-abbrev /test-chmtime /test-ctype /test-config diff --git a/t/helper/test-abbrev.c b/t/helper/test-abbrev.c new file mode 100644 index 000000000..cb3551df9 --- /dev/null +++ b/t/helper/test-abbrev.c @@ -0,0 +1,23 @@ +#include "cache.h" + +int cmd_main(int ac, const char **av) +{ + setup_git_directory(); + + unsigned int hash_delt = 0x13579BDF; + unsigned int hash_base = 0x01020304; + struct object_id oid; + + int i, count = 0; + int n = sizeof(struct object_id) / sizeof(int); + while (count++ < 100000) { + for (i = 0; i < n; i++) + ((unsigned int*)oid.hash)[i] = hash_base; + + find_unique_abbrev(oid.hash, MINIMUM_ABBREV); + + hash_base += hash_delt; + } + + exit(0); +} diff --git a/t/perf/p0008-abbrev.sh b/t/perf/p0008-abbrev.sh new file mode 100755 index 000000000..7c3fad807 --- /dev/null +++ b/t/perf/p0008-abbrev.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +test_description='Test object disambiguation through abbreviations' +. ./perf-lib.sh + +test_perf_large_repo + +test_perf 'find_unique_abbrev()' ' + test-abbrev +' + +test_done -- 2.14.1.538.g56ec8fc98.dirty