Create helper program test-abbrev to compute the minimum length of a
disambiguating short-sha for an input list of object ids.
Perf test p0008-abbrev.sh runs test-abbrev for 100,000 object ids. For
test 0008.1, these objects exist. For test 0008.2 these objects do not
exist in the repo (with high probability).
Signed-off-by: Derrick Stolee <redacted>
---
Makefile | 1 +
t/helper/.gitignore | 1 +
t/helper/test-abbrev.c | 18 ++++++++++++++++++
t/perf/p0008-abbrev.sh | 22 ++++++++++++++++++++++
4 files changed, 42 insertions(+)
create mode 100644 t/helper/test-abbrev.c
create mode 100755 t/perf/p0008-abbrev.sh
diff --git a/Makefile b/Makefile
index 50a2eab80..63438a44e 100644
--- a/Makefile
+++ b/Makefile
@@ -638,6 +638,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 9696f54bb..2190781ff 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..3ad88611a
--- /dev/null
+++ b/t/helper/test-abbrev.c
@@ -0,0 +1,18 @@
+#include "cache.h"
+
+int cmd_main(int ac, const char **av)
+{
+ struct object_id oid;
+ char hex[GIT_MAX_HEXSZ + 2];
+ const char *end;
+
+ setup_git_directory();
+
+ while (fgets(hex, GIT_MAX_HEXSZ + 2, stdin)) {
+ hex[GIT_MAX_HEXSZ] = 0;
+ if (!parse_oid_hex(hex, &oid, &end))
+ find_unique_abbrev(oid.hash, MINIMUM_ABBREV);
+ }
+
+ exit(0);
+}diff --git a/t/perf/p0008-abbrev.sh b/t/perf/p0008-abbrev.sh
new file mode 100755
index 000000000..5cbc8a888
--- /dev/null
+++ b/t/perf/p0008-abbrev.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+test_description='Test object disambiguation through abbreviations'
+. ./perf-lib.sh
+
+test_perf_large_repo
+
+test-list-objects 100000 > objs.txt
+
+test_perf 'find_unique_abbrev() for existing objects' '
+ test-abbrev < objs.txt
+'
+
+test-list-objects --missing 100000 > objs.txt
+
+test_perf 'find_unique_abbrev() for missing objects' '
+ test-abbrev < objs.txt
+'
+
+rm objs.txt
+
+test_done
--
2.14.1.538.g56ec8fc98.dirty