about summary refs log tree commit diff
path: root/third_party/git/t/helper
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/t/helper')
-rw-r--r--third_party/git/t/helper/.gitignore9
-rw-r--r--third_party/git/t/helper/test-config.c18
-rw-r--r--third_party/git/t/helper/test-date.c27
-rw-r--r--third_party/git/t/helper/test-drop-caches.c11
-rw-r--r--third_party/git/t/helper/test-dump-fsmonitor.c2
-rw-r--r--third_party/git/t/helper/test-hashmap.c50
-rw-r--r--third_party/git/t/helper/test-lazy-init-name-hash.c12
-rw-r--r--third_party/git/t/helper/test-parse-options.c2
-rw-r--r--third_party/git/t/helper/test-parse-pathspec-file.c33
-rw-r--r--third_party/git/t/helper/test-path-utils.c113
-rw-r--r--third_party/git/t/helper/test-progress.c81
-rw-r--r--third_party/git/t/helper/test-read-cache.c5
-rw-r--r--third_party/git/t/helper/test-read-graph.c53
-rw-r--r--third_party/git/t/helper/test-run-command.c335
-rw-r--r--third_party/git/t/helper/test-tool.c3
-rw-r--r--third_party/git/t/helper/test-tool.h3
-rw-r--r--third_party/git/t/helper/test-windows-named-pipe.c2
17 files changed, 81 insertions, 678 deletions
diff --git a/third_party/git/t/helper/.gitignore b/third_party/git/t/helper/.gitignore
index 48c7bb0bbb..2bad28af92 100644
--- a/third_party/git/t/helper/.gitignore
+++ b/third_party/git/t/helper/.gitignore
@@ -1,4 +1,5 @@
-/test-tool
-/test-fake-ssh
-/test-line-buffer
-/test-svn-fe
+*
+!*.sh
+!*.[ch]
+!*.gitignore
+
diff --git a/third_party/git/t/helper/test-config.c b/third_party/git/t/helper/test-config.c
index 234c722b48..214003d5b2 100644
--- a/third_party/git/t/helper/test-config.c
+++ b/third_party/git/t/helper/test-config.c
@@ -37,6 +37,21 @@
  *
  */
 
+static const char *scope_name(enum config_scope scope)
+{
+	switch (scope) {
+	case CONFIG_SCOPE_SYSTEM:
+		return "system";
+	case CONFIG_SCOPE_GLOBAL:
+		return "global";
+	case CONFIG_SCOPE_REPO:
+		return "repo";
+	case CONFIG_SCOPE_CMDLINE:
+		return "cmdline";
+	default:
+		return "unknown";
+	}
+}
 static int iterate_cb(const char *var, const char *value, void *data)
 {
 	static int nr;
@@ -48,8 +63,7 @@ static int iterate_cb(const char *var, const char *value, void *data)
 	printf("value=%s\n", value ? value : "(null)");
 	printf("origin=%s\n", current_config_origin_type());
 	printf("name=%s\n", current_config_name());
-	printf("lno=%d\n", current_config_line());
-	printf("scope=%s\n", config_scope_name(current_config_scope()));
+	printf("scope=%s\n", scope_name(current_config_scope()));
 
 	return 0;
 }
diff --git a/third_party/git/t/helper/test-date.c b/third_party/git/t/helper/test-date.c
index 099eff4f0f..585347ea48 100644
--- a/third_party/git/t/helper/test-date.c
+++ b/third_party/git/t/helper/test-date.c
@@ -12,13 +12,13 @@ static const char *usage_msg = "\n"
 "  test-tool date is64bit\n"
 "  test-tool date time_t-is64bit\n";
 
-static void show_relative_dates(const char **argv)
+static void show_relative_dates(const char **argv, struct timeval *now)
 {
 	struct strbuf buf = STRBUF_INIT;
 
 	for (; *argv; argv++) {
 		time_t t = atoi(*argv);
-		show_date_relative(t, &buf);
+		show_date_relative(t, now, &buf);
 		printf("%s -> %s\n", *argv, buf.buf);
 	}
 	strbuf_release(&buf);
@@ -74,20 +74,20 @@ static void parse_dates(const char **argv)
 	strbuf_release(&result);
 }
 
-static void parse_approxidate(const char **argv)
+static void parse_approxidate(const char **argv, struct timeval *now)
 {
 	for (; *argv; argv++) {
 		timestamp_t t;
-		t = approxidate_relative(*argv);
+		t = approxidate_relative(*argv, now);
 		printf("%s -> %s\n", *argv, show_date(t, 0, DATE_MODE(ISO8601)));
 	}
 }
 
-static void parse_approx_timestamp(const char **argv)
+static void parse_approx_timestamp(const char **argv, struct timeval *now)
 {
 	for (; *argv; argv++) {
 		timestamp_t t;
-		t = approxidate_relative(*argv);
+		t = approxidate_relative(*argv, now);
 		printf("%s -> %"PRItime"\n", *argv, t);
 	}
 }
@@ -103,13 +103,22 @@ static void getnanos(const char **argv)
 
 int cmd__date(int argc, const char **argv)
 {
+	struct timeval now;
 	const char *x;
 
+	x = getenv("GIT_TEST_DATE_NOW");
+	if (x) {
+		now.tv_sec = atoi(x);
+		now.tv_usec = 0;
+	}
+	else
+		gettimeofday(&now, NULL);
+
 	argv++;
 	if (!*argv)
 		usage(usage_msg);
 	if (!strcmp(*argv, "relative"))
-		show_relative_dates(argv+1);
+		show_relative_dates(argv+1, &now);
 	else if (!strcmp(*argv, "human"))
 		show_human_dates(argv+1);
 	else if (skip_prefix(*argv, "show:", &x))
@@ -117,9 +126,9 @@ int cmd__date(int argc, const char **argv)
 	else if (!strcmp(*argv, "parse"))
 		parse_dates(argv+1);
 	else if (!strcmp(*argv, "approxidate"))
-		parse_approxidate(argv+1);
+		parse_approxidate(argv+1, &now);
 	else if (!strcmp(*argv, "timestamp"))
-		parse_approx_timestamp(argv+1);
+		parse_approx_timestamp(argv+1, &now);
 	else if (!strcmp(*argv, "getnanos"))
 		getnanos(argv+1);
 	else if (!strcmp(*argv, "is64bit"))
diff --git a/third_party/git/t/helper/test-drop-caches.c b/third_party/git/t/helper/test-drop-caches.c
index 7b4278462b..f65e301f9d 100644
--- a/third_party/git/t/helper/test-drop-caches.c
+++ b/third_party/git/t/helper/test-drop-caches.c
@@ -8,21 +8,18 @@ static int cmd_sync(void)
 {
 	char Buffer[MAX_PATH];
 	DWORD dwRet;
-	char szVolumeAccessPath[] = "\\\\.\\XXXX:";
+	char szVolumeAccessPath[] = "\\\\.\\X:";
 	HANDLE hVolWrite;
-	int success = 0, dos_drive_prefix;
+	int success = 0;
 
 	dwRet = GetCurrentDirectory(MAX_PATH, Buffer);
 	if ((0 == dwRet) || (dwRet > MAX_PATH))
 		return error("Error getting current directory");
 
-	dos_drive_prefix = has_dos_drive_prefix(Buffer);
-	if (!dos_drive_prefix)
+	if (!has_dos_drive_prefix(Buffer))
 		return error("'%s': invalid drive letter", Buffer);
 
-	memcpy(szVolumeAccessPath, Buffer, dos_drive_prefix);
-	szVolumeAccessPath[dos_drive_prefix] = '\0';
-
+	szVolumeAccessPath[4] = Buffer[0];
 	hVolWrite = CreateFile(szVolumeAccessPath, GENERIC_READ | GENERIC_WRITE,
 		FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
 	if (INVALID_HANDLE_VALUE == hVolWrite)
diff --git a/third_party/git/t/helper/test-dump-fsmonitor.c b/third_party/git/t/helper/test-dump-fsmonitor.c
index 975f0ac890..2786f47088 100644
--- a/third_party/git/t/helper/test-dump-fsmonitor.c
+++ b/third_party/git/t/helper/test-dump-fsmonitor.c
@@ -13,7 +13,7 @@ int cmd__dump_fsmonitor(int ac, const char **av)
 		printf("no fsmonitor\n");
 		return 0;
 	}
-	printf("fsmonitor last update %s\n", istate->fsmonitor_last_update);
+	printf("fsmonitor last update %"PRIuMAX"\n", (uintmax_t)istate->fsmonitor_last_update);
 
 	for (i = 0; i < istate->cache_nr; i++)
 		printf((istate->cache[i]->ce_flags & CE_FSMONITOR_VALID) ? "+" : "-");
diff --git a/third_party/git/t/helper/test-hashmap.c b/third_party/git/t/helper/test-hashmap.c
index f38706216f..aaf17b0ddf 100644
--- a/third_party/git/t/helper/test-hashmap.c
+++ b/third_party/git/t/helper/test-hashmap.c
@@ -5,7 +5,6 @@
 
 struct test_entry
 {
-	int padding; /* hashmap entry no longer needs to be the first member */
 	struct hashmap_entry ent;
 	/* key and value as two \0-terminated strings */
 	char key[FLEX_ARRAY];
@@ -17,17 +16,15 @@ static const char *get_value(const struct test_entry *e)
 }
 
 static int test_entry_cmp(const void *cmp_data,
-			  const struct hashmap_entry *eptr,
-			  const struct hashmap_entry *entry_or_key,
+			  const void *entry,
+			  const void *entry_or_key,
 			  const void *keydata)
 {
 	const int ignore_case = cmp_data ? *((int *)cmp_data) : 0;
-	const struct test_entry *e1, *e2;
+	const struct test_entry *e1 = entry;
+	const struct test_entry *e2 = entry_or_key;
 	const char *key = keydata;
 
-	e1 = container_of(eptr, const struct test_entry, ent);
-	e2 = container_of(entry_or_key, const struct test_entry, ent);
-
 	if (ignore_case)
 		return strcasecmp(e1->key, key ? key : e2->key);
 	else
@@ -40,7 +37,7 @@ static struct test_entry *alloc_test_entry(unsigned int hash,
 	size_t klen = strlen(key);
 	size_t vlen = strlen(value);
 	struct test_entry *entry = xmalloc(st_add4(sizeof(*entry), klen, vlen, 2));
-	hashmap_entry_init(&entry->ent, hash);
+	hashmap_entry_init(entry, hash);
 	memcpy(entry->key, key, klen + 1);
 	memcpy(entry->key + klen + 1, value, vlen + 1);
 	return entry;
@@ -106,11 +103,11 @@ static void perf_hashmap(unsigned int method, unsigned int rounds)
 
 			/* add entries */
 			for (i = 0; i < TEST_SIZE; i++) {
-				hashmap_entry_init(&entries[i]->ent, hashes[i]);
-				hashmap_add(&map, &entries[i]->ent);
+				hashmap_entry_init(entries[i], hashes[i]);
+				hashmap_add(&map, entries[i]);
 			}
 
-			hashmap_free(&map);
+			hashmap_free(&map, 0);
 		}
 	} else {
 		/* test map lookups */
@@ -119,8 +116,8 @@ static void perf_hashmap(unsigned int method, unsigned int rounds)
 		/* fill the map (sparsely if specified) */
 		j = (method & TEST_SPARSE) ? TEST_SIZE / 10 : TEST_SIZE;
 		for (i = 0; i < j; i++) {
-			hashmap_entry_init(&entries[i]->ent, hashes[i]);
-			hashmap_add(&map, &entries[i]->ent);
+			hashmap_entry_init(entries[i], hashes[i]);
+			hashmap_add(&map, entries[i]);
 		}
 
 		for (j = 0; j < rounds; j++) {
@@ -130,7 +127,7 @@ static void perf_hashmap(unsigned int method, unsigned int rounds)
 			}
 		}
 
-		hashmap_free(&map);
+		hashmap_free(&map, 0);
 	}
 }
 
@@ -182,7 +179,7 @@ int cmd__hashmap(int argc, const char **argv)
 			entry = alloc_test_entry(hash, p1, p2);
 
 			/* add to hashmap */
-			hashmap_add(&map, &entry->ent);
+			hashmap_add(&map, entry);
 
 		} else if (!strcmp("put", cmd) && p1 && p2) {
 
@@ -190,44 +187,43 @@ int cmd__hashmap(int argc, const char **argv)
 			entry = alloc_test_entry(hash, p1, p2);
 
 			/* add / replace entry */
-			entry = hashmap_put_entry(&map, entry, ent);
+			entry = hashmap_put(&map, entry);
 
 			/* print and free replaced entry, if any */
 			puts(entry ? get_value(entry) : "NULL");
 			free(entry);
 
 		} else if (!strcmp("get", cmd) && p1) {
+
 			/* lookup entry in hashmap */
-			entry = hashmap_get_entry_from_hash(&map, hash, p1,
-							struct test_entry, ent);
+			entry = hashmap_get_from_hash(&map, hash, p1);
 
 			/* print result */
 			if (!entry)
 				puts("NULL");
-			hashmap_for_each_entry_from(&map, entry, ent)
+			while (entry) {
 				puts(get_value(entry));
+				entry = hashmap_get_next(&map, entry);
+			}
 
 		} else if (!strcmp("remove", cmd) && p1) {
 
 			/* setup static key */
 			struct hashmap_entry key;
-			struct hashmap_entry *rm;
 			hashmap_entry_init(&key, hash);
 
 			/* remove entry from hashmap */
-			rm = hashmap_remove(&map, &key, p1);
-			entry = rm ? container_of(rm, struct test_entry, ent)
-					: NULL;
+			entry = hashmap_remove(&map, &key, p1);
 
 			/* print result and free entry*/
 			puts(entry ? get_value(entry) : "NULL");
 			free(entry);
 
 		} else if (!strcmp("iterate", cmd)) {
-			struct hashmap_iter iter;
 
-			hashmap_for_each_entry(&map, &iter, entry,
-						ent /* member name */)
+			struct hashmap_iter iter;
+			hashmap_iter_init(&map, &iter);
+			while ((entry = hashmap_iter_next(&iter)))
 				printf("%s %s\n", entry->key, get_value(entry));
 
 		} else if (!strcmp("size", cmd)) {
@@ -262,6 +258,6 @@ int cmd__hashmap(int argc, const char **argv)
 	}
 
 	strbuf_release(&line);
-	hashmap_free_entries(&map, struct test_entry, ent);
+	hashmap_free(&map, 1);
 	return 0;
 }
diff --git a/third_party/git/t/helper/test-lazy-init-name-hash.c b/third_party/git/t/helper/test-lazy-init-name-hash.c
index cd1b4c9736..b99a37080d 100644
--- a/third_party/git/t/helper/test-lazy-init-name-hash.c
+++ b/third_party/git/t/helper/test-lazy-init-name-hash.c
@@ -41,13 +41,17 @@ static void dump_run(void)
 			die("non-threaded code path used");
 	}
 
-	hashmap_for_each_entry(&the_index.dir_hash, &iter_dir, dir,
-				ent /* member name */)
+	dir = hashmap_iter_first(&the_index.dir_hash, &iter_dir);
+	while (dir) {
 		printf("dir %08x %7d %s\n", dir->ent.hash, dir->nr, dir->name);
+		dir = hashmap_iter_next(&iter_dir);
+	}
 
-	hashmap_for_each_entry(&the_index.name_hash, &iter_cache, ce,
-				ent /* member name */)
+	ce = hashmap_iter_first(&the_index.name_hash, &iter_cache);
+	while (ce) {
 		printf("name %08x %s\n", ce->ent.hash, ce->name);
+		ce = hashmap_iter_next(&iter_cache);
+	}
 
 	discard_cache();
 }
diff --git a/third_party/git/t/helper/test-parse-options.c b/third_party/git/t/helper/test-parse-options.c
index 2051ce57db..af82db06ac 100644
--- a/third_party/git/t/helper/test-parse-options.c
+++ b/third_party/git/t/helper/test-parse-options.c
@@ -121,8 +121,6 @@ int cmd__parse_options(int argc, const char **argv)
 		OPT_INTEGER('j', NULL, &integer, "get a integer, too"),
 		OPT_MAGNITUDE('m', "magnitude", &magnitude, "get a magnitude"),
 		OPT_SET_INT(0, "set23", &integer, "set integer to 23", 23),
-		OPT_CMDMODE(0, "mode1", &integer, "set integer to 1 (cmdmode option)", 1),
-		OPT_CMDMODE(0, "mode2", &integer, "set integer to 2 (cmdmode option)", 2),
 		OPT_CALLBACK('L', "length", &integer, "str",
 			"get length of <str>", length_callback),
 		OPT_FILENAME('F', "file", &file, "set file to <file>"),
diff --git a/third_party/git/t/helper/test-parse-pathspec-file.c b/third_party/git/t/helper/test-parse-pathspec-file.c
deleted file mode 100644
index 02f4ccfd2a..0000000000
--- a/third_party/git/t/helper/test-parse-pathspec-file.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "test-tool.h"
-#include "parse-options.h"
-#include "pathspec.h"
-#include "gettext.h"
-
-int cmd__parse_pathspec_file(int argc, const char **argv)
-{
-	struct pathspec pathspec;
-	const char *pathspec_from_file = 0;
-	int pathspec_file_nul = 0, i;
-
-	static const char *const usage[] = {
-		"test-tool parse-pathspec-file --pathspec-from-file [--pathspec-file-nul]",
-		NULL
-	};
-
-	struct option options[] = {
-		OPT_PATHSPEC_FROM_FILE(&pathspec_from_file),
-		OPT_PATHSPEC_FILE_NUL(&pathspec_file_nul),
-		OPT_END()
-	};
-
-	parse_options(argc, argv, 0, options, usage, 0);
-
-	parse_pathspec_file(&pathspec, 0, 0, 0, pathspec_from_file,
-			    pathspec_file_nul);
-
-	for (i = 0; i < pathspec.nr; i++)
-		printf("%s\n", pathspec.items[i].original);
-
-	clear_pathspec(&pathspec);
-	return 0;
-}
diff --git a/third_party/git/t/helper/test-path-utils.c b/third_party/git/t/helper/test-path-utils.c
index 409034cf4e..5d543ad21f 100644
--- a/third_party/git/t/helper/test-path-utils.c
+++ b/third_party/git/t/helper/test-path-utils.c
@@ -185,99 +185,6 @@ static int cmp_by_st_size(const void *a, const void *b)
 	return x > y ? -1 : (x < y ? +1 : 0);
 }
 
-/*
- * A very simple, reproducible pseudo-random generator. Copied from
- * `test-genrandom.c`.
- */
-static uint64_t my_random_value = 1234;
-
-static uint64_t my_random(void)
-{
-	my_random_value = my_random_value * 1103515245 + 12345;
-	return my_random_value;
-}
-
-/*
- * A fast approximation of the square root, without requiring math.h.
- *
- * It uses Newton's method to approximate the solution of 0 = x^2 - value.
- */
-static double my_sqrt(double value)
-{
-	const double epsilon = 1e-6;
-	double x = value;
-
-	if (value == 0)
-		return 0;
-
-	for (;;) {
-		double delta = (value / x - x) / 2;
-		if (delta < epsilon && delta > -epsilon)
-			return x + delta;
-		x += delta;
-	}
-}
-
-static int protect_ntfs_hfs_benchmark(int argc, const char **argv)
-{
-	size_t i, j, nr, min_len = 3, max_len = 20;
-	char **names;
-	int repetitions = 15, file_mode = 0100644;
-	uint64_t begin, end;
-	double m[3][2], v[3][2];
-	uint64_t cumul;
-	double cumul2;
-
-	if (argc > 1 && !strcmp(argv[1], "--with-symlink-mode")) {
-		file_mode = 0120000;
-		argc--;
-		argv++;
-	}
-
-	nr = argc > 1 ? strtoul(argv[1], NULL, 0) : 1000000;
-	ALLOC_ARRAY(names, nr);
-
-	if (argc > 2) {
-		min_len = strtoul(argv[2], NULL, 0);
-		if (argc > 3)
-			max_len = strtoul(argv[3], NULL, 0);
-		if (min_len > max_len)
-			die("min_len > max_len");
-	}
-
-	for (i = 0; i < nr; i++) {
-		size_t len = min_len + (my_random() % (max_len + 1 - min_len));
-
-		names[i] = xmallocz(len);
-		while (len > 0)
-			names[i][--len] = (char)(' ' + (my_random() % ('\x7f' - ' ')));
-	}
-
-	for (protect_ntfs = 0; protect_ntfs < 2; protect_ntfs++)
-		for (protect_hfs = 0; protect_hfs < 2; protect_hfs++) {
-			cumul = 0;
-			cumul2 = 0;
-			for (i = 0; i < repetitions; i++) {
-				begin = getnanotime();
-				for (j = 0; j < nr; j++)
-					verify_path(names[j], file_mode);
-				end = getnanotime();
-				printf("protect_ntfs = %d, protect_hfs = %d: %lfms\n", protect_ntfs, protect_hfs, (end-begin) / (double)1e6);
-				cumul += end - begin;
-				cumul2 += (end - begin) * (end - begin);
-			}
-			m[protect_ntfs][protect_hfs] = cumul / (double)repetitions;
-			v[protect_ntfs][protect_hfs] = my_sqrt(cumul2 / (double)repetitions - m[protect_ntfs][protect_hfs] * m[protect_ntfs][protect_hfs]);
-			printf("mean: %lfms, stddev: %lfms\n", m[protect_ntfs][protect_hfs] / (double)1e6, v[protect_ntfs][protect_hfs] / (double)1e6);
-		}
-
-	for (protect_ntfs = 0; protect_ntfs < 2; protect_ntfs++)
-		for (protect_hfs = 0; protect_hfs < 2; protect_hfs++)
-			printf("ntfs=%d/hfs=%d: %lf%% slower\n", protect_ntfs, protect_hfs, (m[protect_ntfs][protect_hfs] - m[0][0]) * 100 / m[0][0]);
-
-	return 0;
-}
-
 int cmd__path_utils(int argc, const char **argv)
 {
 	if (argc == 3 && !strcmp(argv[1], "normalize_path_copy")) {
@@ -448,26 +355,6 @@ int cmd__path_utils(int argc, const char **argv)
 		return !!res;
 	}
 
-	if (argc > 1 && !strcmp(argv[1], "protect_ntfs_hfs"))
-		return !!protect_ntfs_hfs_benchmark(argc - 1, argv + 1);
-
-	if (argc > 1 && !strcmp(argv[1], "is_valid_path")) {
-		int res = 0, expect = 1, i;
-
-		for (i = 2; i < argc; i++)
-			if (!strcmp("--not", argv[i]))
-				expect = 0;
-			else if (expect != is_valid_path(argv[i]))
-				res = error("'%s' is%s a valid path",
-					    argv[i], expect ? " not" : "");
-			else
-				fprintf(stderr,
-					"'%s' is%s a valid path\n",
-					argv[i], expect ? "" : " not");
-
-		return !!res;
-	}
-
 	fprintf(stderr, "%s: unknown function name: %s\n", argv[0],
 		argv[1] ? argv[1] : "(there was none)");
 	return 1;
diff --git a/third_party/git/t/helper/test-progress.c b/third_party/git/t/helper/test-progress.c
deleted file mode 100644
index 42b96cb103..0000000000
--- a/third_party/git/t/helper/test-progress.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * A test helper to exercise the progress display.
- *
- * Reads instructions from standard input, one instruction per line:
- *
- *   "progress <items>" - Call display_progress() with the given item count
- *                        as parameter.
- *   "throughput <bytes> <millis> - Call display_throughput() with the given
- *                                  byte count as parameter.  The 'millis'
- *                                  specify the time elapsed since the
- *                                  start_progress() call.
- *   "update" - Set the 'progress_update' flag.
- *
- * See 't0500-progress-display.sh' for examples.
- */
-#include "test-tool.h"
-#include "gettext.h"
-#include "parse-options.h"
-#include "progress.h"
-#include "strbuf.h"
-
-/*
- * These are defined in 'progress.c', but are not exposed in 'progress.h',
- * because they are exclusively for testing.
- */
-extern int progress_testing;
-extern uint64_t progress_test_ns;
-void progress_test_force_update(void);
-
-int cmd__progress(int argc, const char **argv)
-{
-	int total = 0;
-	const char *title;
-	struct strbuf line = STRBUF_INIT;
-	struct progress *progress;
-
-	const char *usage[] = {
-		"test-tool progress [--total=<n>] <progress-title>",
-		NULL
-	};
-	struct option options[] = {
-		OPT_INTEGER(0, "total", &total, "total number of items"),
-		OPT_END(),
-	};
-
-	argc = parse_options(argc, argv, NULL, options, usage, 0);
-	if (argc != 1)
-		die("need a title for the progress output");
-	title = argv[0];
-
-	progress_testing = 1;
-	progress = start_progress(title, total);
-	while (strbuf_getline(&line, stdin) != EOF) {
-		char *end;
-
-		if (skip_prefix(line.buf, "progress ", (const char **) &end)) {
-			uint64_t item_count = strtoull(end, &end, 10);
-			if (*end != '\0')
-				die("invalid input: '%s'\n", line.buf);
-			display_progress(progress, item_count);
-		} else if (skip_prefix(line.buf, "throughput ",
-				       (const char **) &end)) {
-			uint64_t byte_count, test_ms;
-
-			byte_count = strtoull(end, &end, 10);
-			if (*end != ' ')
-				die("invalid input: '%s'\n", line.buf);
-			test_ms = strtoull(end + 1, &end, 10);
-			if (*end != '\0')
-				die("invalid input: '%s'\n", line.buf);
-			progress_test_ns = test_ms * 1000 * 1000;
-			display_throughput(progress, byte_count);
-		} else if (!strcmp(line.buf, "update"))
-			progress_test_force_update();
-		else
-			die("invalid input: '%s'\n", line.buf);
-	}
-	stop_progress(&progress);
-
-	return 0;
-}
diff --git a/third_party/git/t/helper/test-read-cache.c b/third_party/git/t/helper/test-read-cache.c
index 244977a29b..7e79b555de 100644
--- a/third_party/git/t/helper/test-read-cache.c
+++ b/third_party/git/t/helper/test-read-cache.c
@@ -4,10 +4,11 @@
 
 int cmd__read_cache(int argc, const char **argv)
 {
-	int i, cnt = 1;
+	int i, cnt = 1, namelen;
 	const char *name = NULL;
 
 	if (argc > 1 && skip_prefix(argv[1], "--print-and-refresh=", &name)) {
+		namelen = strlen(name);
 		argc--;
 		argv++;
 	}
@@ -23,7 +24,7 @@ int cmd__read_cache(int argc, const char **argv)
 
 			refresh_index(&the_index, REFRESH_QUIET,
 				      NULL, NULL, NULL);
-			pos = index_name_pos(&the_index, name, strlen(name));
+			pos = index_name_pos(&the_index, name, namelen);
 			if (pos < 0)
 				die("%s not in index", name);
 			printf("%s is%s up to date\n", name,
diff --git a/third_party/git/t/helper/test-read-graph.c b/third_party/git/t/helper/test-read-graph.c
deleted file mode 100644
index f8a461767c..0000000000
--- a/third_party/git/t/helper/test-read-graph.c
+++ /dev/null
@@ -1,53 +0,0 @@
-#include "test-tool.h"
-#include "cache.h"
-#include "commit-graph.h"
-#include "repository.h"
-#include "object-store.h"
-
-int cmd__read_graph(int argc, const char **argv)
-{
-	struct commit_graph *graph = NULL;
-	char *graph_name;
-	int open_ok;
-	int fd;
-	struct stat st;
-	struct object_directory *odb;
-
-	setup_git_directory();
-	odb = the_repository->objects->odb;
-
-	graph_name = get_commit_graph_filename(odb);
-
-	open_ok = open_commit_graph(graph_name, &fd, &st);
-	if (!open_ok)
-		die_errno(_("Could not open commit-graph '%s'"), graph_name);
-
-	graph = load_commit_graph_one_fd_st(fd, &st, odb);
-	if (!graph)
-		return 1;
-
-	FREE_AND_NULL(graph_name);
-
-	printf("header: %08x %d %d %d %d\n",
-		ntohl(*(uint32_t*)graph->data),
-		*(unsigned char*)(graph->data + 4),
-		*(unsigned char*)(graph->data + 5),
-		*(unsigned char*)(graph->data + 6),
-		*(unsigned char*)(graph->data + 7));
-	printf("num_commits: %u\n", graph->num_commits);
-	printf("chunks:");
-
-	if (graph->chunk_oid_fanout)
-		printf(" oid_fanout");
-	if (graph->chunk_oid_lookup)
-		printf(" oid_lookup");
-	if (graph->chunk_commit_data)
-		printf(" commit_metadata");
-	if (graph->chunk_extra_edges)
-		printf(" extra_edges");
-	printf("\n");
-
-	UNLEAK(graph);
-
-	return 0;
-}
diff --git a/third_party/git/t/helper/test-run-command.c b/third_party/git/t/helper/test-run-command.c
index 1646aa25d8..2cc93bb69c 100644
--- a/third_party/git/t/helper/test-run-command.c
+++ b/third_party/git/t/helper/test-run-command.c
@@ -10,16 +10,11 @@
 
 #include "test-tool.h"
 #include "git-compat-util.h"
-#include "cache.h"
 #include "run-command.h"
 #include "argv-array.h"
 #include "strbuf.h"
-#include "parse-options.h"
-#include "string-list.h"
-#include "thread-utils.h"
-#include "wildmatch.h"
-#include "gettext.h"
-#include "parse-options.h"
+#include <string.h>
+#include <errno.h>
 
 static int number_callbacks;
 static int parallel_next(struct child_process *cp,
@@ -55,337 +50,11 @@ static int task_finished(int result,
 	return 1;
 }
 
-struct testsuite {
-	struct string_list tests, failed;
-	int next;
-	int quiet, immediate, verbose, verbose_log, trace, write_junit_xml;
-};
-#define TESTSUITE_INIT \
-	{ STRING_LIST_INIT_DUP, STRING_LIST_INIT_DUP, -1, 0, 0, 0, 0, 0, 0 }
-
-static int next_test(struct child_process *cp, struct strbuf *err, void *cb,
-		     void **task_cb)
-{
-	struct testsuite *suite = cb;
-	const char *test;
-	if (suite->next >= suite->tests.nr)
-		return 0;
-
-	test = suite->tests.items[suite->next++].string;
-	argv_array_pushl(&cp->args, "sh", test, NULL);
-	if (suite->quiet)
-		argv_array_push(&cp->args, "--quiet");
-	if (suite->immediate)
-		argv_array_push(&cp->args, "-i");
-	if (suite->verbose)
-		argv_array_push(&cp->args, "-v");
-	if (suite->verbose_log)
-		argv_array_push(&cp->args, "-V");
-	if (suite->trace)
-		argv_array_push(&cp->args, "-x");
-	if (suite->write_junit_xml)
-		argv_array_push(&cp->args, "--write-junit-xml");
-
-	strbuf_addf(err, "Output of '%s':\n", test);
-	*task_cb = (void *)test;
-
-	return 1;
-}
-
-static int test_finished(int result, struct strbuf *err, void *cb,
-			 void *task_cb)
-{
-	struct testsuite *suite = cb;
-	const char *name = (const char *)task_cb;
-
-	if (result)
-		string_list_append(&suite->failed, name);
-
-	strbuf_addf(err, "%s: '%s'\n", result ? "FAIL" : "SUCCESS", name);
-
-	return 0;
-}
-
-static int test_failed(struct strbuf *out, void *cb, void *task_cb)
-{
-	struct testsuite *suite = cb;
-	const char *name = (const char *)task_cb;
-
-	string_list_append(&suite->failed, name);
-	strbuf_addf(out, "FAILED TO START: '%s'\n", name);
-
-	return 0;
-}
-
-static const char * const testsuite_usage[] = {
-	"test-run-command testsuite [<options>] [<pattern>...]",
-	NULL
-};
-
-static int testsuite(int argc, const char **argv)
-{
-	struct testsuite suite = TESTSUITE_INIT;
-	int max_jobs = 1, i, ret;
-	DIR *dir;
-	struct dirent *d;
-	struct option options[] = {
-		OPT_BOOL('i', "immediate", &suite.immediate,
-			 "stop at first failed test case(s)"),
-		OPT_INTEGER('j', "jobs", &max_jobs, "run <N> jobs in parallel"),
-		OPT_BOOL('q', "quiet", &suite.quiet, "be terse"),
-		OPT_BOOL('v', "verbose", &suite.verbose, "be verbose"),
-		OPT_BOOL('V', "verbose-log", &suite.verbose_log,
-			 "be verbose, redirected to a file"),
-		OPT_BOOL('x', "trace", &suite.trace, "trace shell commands"),
-		OPT_BOOL(0, "write-junit-xml", &suite.write_junit_xml,
-			 "write JUnit-style XML files"),
-		OPT_END()
-	};
-
-	memset(&suite, 0, sizeof(suite));
-	suite.tests.strdup_strings = suite.failed.strdup_strings = 1;
-
-	argc = parse_options(argc, argv, NULL, options,
-			testsuite_usage, PARSE_OPT_STOP_AT_NON_OPTION);
-
-	if (max_jobs <= 0)
-		max_jobs = online_cpus();
-
-	dir = opendir(".");
-	if (!dir)
-		die("Could not open the current directory");
-	while ((d = readdir(dir))) {
-		const char *p = d->d_name;
-
-		if (*p != 't' || !isdigit(p[1]) || !isdigit(p[2]) ||
-		    !isdigit(p[3]) || !isdigit(p[4]) || p[5] != '-' ||
-		    !ends_with(p, ".sh"))
-			continue;
-
-		/* No pattern: match all */
-		if (!argc) {
-			string_list_append(&suite.tests, p);
-			continue;
-		}
-
-		for (i = 0; i < argc; i++)
-			if (!wildmatch(argv[i], p, 0)) {
-				string_list_append(&suite.tests, p);
-				break;
-			}
-	}
-	closedir(dir);
-
-	if (!suite.tests.nr)
-		die("No tests match!");
-	if (max_jobs > suite.tests.nr)
-		max_jobs = suite.tests.nr;
-
-	fprintf(stderr, "Running %d tests (%d at a time)\n",
-		suite.tests.nr, max_jobs);
-
-	ret = run_processes_parallel(max_jobs, next_test, test_failed,
-				     test_finished, &suite);
-
-	if (suite.failed.nr > 0) {
-		ret = 1;
-		fprintf(stderr, "%d tests failed:\n\n", suite.failed.nr);
-		for (i = 0; i < suite.failed.nr; i++)
-			fprintf(stderr, "\t%s\n", suite.failed.items[i].string);
-	}
-
-	string_list_clear(&suite.tests, 0);
-	string_list_clear(&suite.failed, 0);
-
-	return !!ret;
-}
-
-static uint64_t my_random_next = 1234;
-
-static uint64_t my_random(void)
-{
-	uint64_t res = my_random_next;
-	my_random_next = my_random_next * 1103515245 + 12345;
-	return res;
-}
-
-static int quote_stress_test(int argc, const char **argv)
-{
-	/*
-	 * We are running a quote-stress test.
-	 * spawn a subprocess that runs quote-stress with a
-	 * special option that echoes back the arguments that
-	 * were passed in.
-	 */
-	char special[] = ".?*\\^_\"'`{}()[]<>@~&+:;$%"; // \t\r\n\a";
-	int i, j, k, trials = 100, skip = 0, msys2 = 0;
-	struct strbuf out = STRBUF_INIT;
-	struct argv_array args = ARGV_ARRAY_INIT;
-	struct option options[] = {
-		OPT_INTEGER('n', "trials", &trials, "Number of trials"),
-		OPT_INTEGER('s', "skip", &skip, "Skip <n> trials"),
-		OPT_BOOL('m', "msys2", &msys2, "Test quoting for MSYS2's sh"),
-		OPT_END()
-	};
-	const char * const usage[] = {
-		"test-tool run-command quote-stress-test <options>",
-		NULL
-	};
-
-	argc = parse_options(argc, argv, NULL, options, usage, 0);
-
-	setenv("MSYS_NO_PATHCONV", "1", 0);
-
-	for (i = 0; i < trials; i++) {
-		struct child_process cp = CHILD_PROCESS_INIT;
-		size_t arg_count, arg_offset;
-		int ret = 0;
-
-		argv_array_clear(&args);
-		if (msys2)
-			argv_array_pushl(&args, "sh", "-c",
-					 "printf %s\\\\0 \"$@\"", "skip", NULL);
-		else
-			argv_array_pushl(&args, "test-tool", "run-command",
-					 "quote-echo", NULL);
-		arg_offset = args.argc;
-
-		if (argc > 0) {
-			trials = 1;
-			arg_count = argc;
-			for (j = 0; j < arg_count; j++)
-				argv_array_push(&args, argv[j]);
-		} else {
-			arg_count = 1 + (my_random() % 5);
-			for (j = 0; j < arg_count; j++) {
-				char buf[20];
-				size_t min_len = 1;
-				size_t arg_len = min_len +
-					(my_random() % (ARRAY_SIZE(buf) - min_len));
-
-				for (k = 0; k < arg_len; k++)
-					buf[k] = special[my_random() %
-						ARRAY_SIZE(special)];
-				buf[arg_len] = '\0';
-
-				argv_array_push(&args, buf);
-			}
-		}
-
-		if (i < skip)
-			continue;
-
-		cp.argv = args.argv;
-		strbuf_reset(&out);
-		if (pipe_command(&cp, NULL, 0, &out, 0, NULL, 0) < 0)
-			return error("Failed to spawn child process");
-
-		for (j = 0, k = 0; j < arg_count; j++) {
-			const char *arg = args.argv[j + arg_offset];
-
-			if (strcmp(arg, out.buf + k))
-				ret = error("incorrectly quoted arg: '%s', "
-					    "echoed back as '%s'",
-					     arg, out.buf + k);
-			k += strlen(out.buf + k) + 1;
-		}
-
-		if (k != out.len)
-			ret = error("got %d bytes, but consumed only %d",
-				     (int)out.len, (int)k);
-
-		if (ret) {
-			fprintf(stderr, "Trial #%d failed. Arguments:\n", i);
-			for (j = 0; j < arg_count; j++)
-				fprintf(stderr, "arg #%d: '%s'\n",
-					(int)j, args.argv[j + arg_offset]);
-
-			strbuf_release(&out);
-			argv_array_clear(&args);
-
-			return ret;
-		}
-
-		if (i && (i % 100) == 0)
-			fprintf(stderr, "Trials completed: %d\n", (int)i);
-	}
-
-	strbuf_release(&out);
-	argv_array_clear(&args);
-
-	return 0;
-}
-
-static int quote_echo(int argc, const char **argv)
-{
-	while (argc > 1) {
-		fwrite(argv[1], strlen(argv[1]), 1, stdout);
-		fputc('\0', stdout);
-		argv++;
-		argc--;
-	}
-
-	return 0;
-}
-
-static int inherit_handle(const char *argv0)
-{
-	struct child_process cp = CHILD_PROCESS_INIT;
-	char path[PATH_MAX];
-	int tmp;
-
-	/* First, open an inheritable handle */
-	xsnprintf(path, sizeof(path), "out-XXXXXX");
-	tmp = xmkstemp(path);
-
-	argv_array_pushl(&cp.args,
-			 "test-tool", argv0, "inherited-handle-child", NULL);
-	cp.in = -1;
-	cp.no_stdout = cp.no_stderr = 1;
-	if (start_command(&cp) < 0)
-		die("Could not start child process");
-
-	/* Then close it, and try to delete it. */
-	close(tmp);
-	if (unlink(path))
-		die("Could not delete '%s'", path);
-
-	if (close(cp.in) < 0 || finish_command(&cp) < 0)
-		die("Child did not finish");
-
-	return 0;
-}
-
-static int inherit_handle_child(void)
-{
-	struct strbuf buf = STRBUF_INIT;
-
-	if (strbuf_read(&buf, 0, 0) < 0)
-		die("Could not read stdin");
-	printf("Received %s\n", buf.buf);
-	strbuf_release(&buf);
-
-	return 0;
-}
-
 int cmd__run_command(int argc, const char **argv)
 {
 	struct child_process proc = CHILD_PROCESS_INIT;
 	int jobs;
 
-	if (argc > 1 && !strcmp(argv[1], "testsuite"))
-		exit(testsuite(argc - 1, argv + 1));
-	if (!strcmp(argv[1], "inherited-handle"))
-		exit(inherit_handle(argv[0]));
-	if (!strcmp(argv[1], "inherited-handle-child"))
-		exit(inherit_handle_child());
-
-	if (argc >= 2 && !strcmp(argv[1], "quote-stress-test"))
-		return !!quote_stress_test(argc - 1, argv + 1);
-
-	if (argc >= 2 && !strcmp(argv[1], "quote-echo"))
-		return !!quote_echo(argc - 1, argv + 1);
-
 	if (argc < 3)
 		return 1;
 	while (!strcmp(argv[1], "env")) {
diff --git a/third_party/git/t/helper/test-tool.c b/third_party/git/t/helper/test-tool.c
index c9a232d238..ce7e89028c 100644
--- a/third_party/git/t/helper/test-tool.c
+++ b/third_party/git/t/helper/test-tool.c
@@ -39,14 +39,11 @@ static struct test_cmd cmds[] = {
 	{ "oidmap", cmd__oidmap },
 	{ "online-cpus", cmd__online_cpus },
 	{ "parse-options", cmd__parse_options },
-	{ "parse-pathspec-file", cmd__parse_pathspec_file },
 	{ "path-utils", cmd__path_utils },
 	{ "pkt-line", cmd__pkt_line },
 	{ "prio-queue", cmd__prio_queue },
-	{ "progress", cmd__progress },
 	{ "reach", cmd__reach },
 	{ "read-cache", cmd__read_cache },
-	{ "read-graph", cmd__read_graph },
 	{ "read-midx", cmd__read_midx },
 	{ "ref-store", cmd__ref_store },
 	{ "regex", cmd__regex },
diff --git a/third_party/git/t/helper/test-tool.h b/third_party/git/t/helper/test-tool.h
index c8549fd87f..f805bb39ae 100644
--- a/third_party/git/t/helper/test-tool.h
+++ b/third_party/git/t/helper/test-tool.h
@@ -29,14 +29,11 @@ int cmd__mktemp(int argc, const char **argv);
 int cmd__oidmap(int argc, const char **argv);
 int cmd__online_cpus(int argc, const char **argv);
 int cmd__parse_options(int argc, const char **argv);
-int cmd__parse_pathspec_file(int argc, const char** argv);
 int cmd__path_utils(int argc, const char **argv);
 int cmd__pkt_line(int argc, const char **argv);
 int cmd__prio_queue(int argc, const char **argv);
-int cmd__progress(int argc, const char **argv);
 int cmd__reach(int argc, const char **argv);
 int cmd__read_cache(int argc, const char **argv);
-int cmd__read_graph(int argc, const char **argv);
 int cmd__read_midx(int argc, const char **argv);
 int cmd__ref_store(int argc, const char **argv);
 int cmd__regex(int argc, const char **argv);
diff --git a/third_party/git/t/helper/test-windows-named-pipe.c b/third_party/git/t/helper/test-windows-named-pipe.c
index ae52183e63..b4b752b01a 100644
--- a/third_party/git/t/helper/test-windows-named-pipe.c
+++ b/third_party/git/t/helper/test-windows-named-pipe.c
@@ -19,7 +19,7 @@ int cmd__windows_named_pipe(int argc, const char **argv)
 	if (argc < 2)
 		goto print_usage;
 	filename = argv[1];
-	if (strpbrk(filename, "/\\"))
+	if (strchr(filename, '/') || strchr(filename, '\\'))
 		goto print_usage;
 	strbuf_addf(&pathname, "//./pipe/%s", filename);