about summary refs log tree commit diff
path: root/third_party/git/t/perf
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/t/perf')
-rw-r--r--third_party/git/t/perf/.gitignore3
-rw-r--r--third_party/git/t/perf/Makefile15
-rw-r--r--third_party/git/t/perf/README204
-rwxr-xr-xthird_party/git/t/perf/aggregate.perl356
-rwxr-xr-xthird_party/git/t/perf/bisect_regression73
-rwxr-xr-xthird_party/git/t/perf/bisect_run_script53
-rw-r--r--third_party/git/t/perf/lib-pack.sh25
-rwxr-xr-xthird_party/git/t/perf/min_time.perl21
-rwxr-xr-xthird_party/git/t/perf/p0000-perf-lib-sanity.sh57
-rwxr-xr-xthird_party/git/t/perf/p0001-rev-list.sh48
-rwxr-xr-xthird_party/git/t/perf/p0002-read-cache.sh14
-rwxr-xr-xthird_party/git/t/perf/p0003-delta-base-cache.sh31
-rwxr-xr-xthird_party/git/t/perf/p0004-lazy-init-name-hash.sh56
-rwxr-xr-xthird_party/git/t/perf/p0005-status.sh49
-rwxr-xr-xthird_party/git/t/perf/p0006-read-tree-checkout.sh67
-rwxr-xr-xthird_party/git/t/perf/p0007-write-cache.sh29
-rwxr-xr-xthird_party/git/t/perf/p0071-sort.sh26
-rwxr-xr-xthird_party/git/t/perf/p0100-globbing.sh43
-rwxr-xr-xthird_party/git/t/perf/p1400-update-ref.sh39
-rwxr-xr-xthird_party/git/t/perf/p1450-fsck.sh13
-rwxr-xr-xthird_party/git/t/perf/p1451-fsck-skip-list.sh40
-rwxr-xr-xthird_party/git/t/perf/p3400-rebase.sh56
-rwxr-xr-xthird_party/git/t/perf/p3404-rebase-interactive.sh36
-rwxr-xr-xthird_party/git/t/perf/p4000-diff-algorithms.sh29
-rwxr-xr-xthird_party/git/t/perf/p4001-diff-no-index.sh22
-rwxr-xr-xthird_party/git/t/perf/p4205-log-pretty-formats.sh16
-rwxr-xr-xthird_party/git/t/perf/p4211-line-log.sh42
-rwxr-xr-xthird_party/git/t/perf/p4220-log-grep-engines.sh53
-rwxr-xr-xthird_party/git/t/perf/p4221-log-grep-engines-fixed.sh44
-rwxr-xr-xthird_party/git/t/perf/p5302-pack-index.sh53
-rwxr-xr-xthird_party/git/t/perf/p5303-many-packs.sh110
-rwxr-xr-xthird_party/git/t/perf/p5304-prune.sh35
-rwxr-xr-xthird_party/git/t/perf/p5310-pack-bitmaps.sh99
-rwxr-xr-xthird_party/git/t/perf/p5311-pack-bitmaps-fetch.sh44
-rwxr-xr-xthird_party/git/t/perf/p5550-fetch-tags.sh78
-rwxr-xr-xthird_party/git/t/perf/p5551-fetch-rescan.sh55
-rwxr-xr-xthird_party/git/t/perf/p5600-partial-clone.sh26
-rwxr-xr-xthird_party/git/t/perf/p5601-clone-reference.sh27
-rwxr-xr-xthird_party/git/t/perf/p7000-filter-branch.sh24
-rwxr-xr-xthird_party/git/t/perf/p7300-clean.sh35
-rwxr-xr-xthird_party/git/t/perf/p7519-fsmonitor.sh183
-rwxr-xr-xthird_party/git/t/perf/p7810-grep.sh23
-rwxr-xr-xthird_party/git/t/perf/p7820-grep-engines.sh88
-rwxr-xr-xthird_party/git/t/perf/p7821-grep-engines-fixed.sh74
-rwxr-xr-xthird_party/git/t/perf/p9300-fast-import-export.sh23
-rw-r--r--third_party/git/t/perf/perf-lib.sh249
-rw-r--r--third_party/git/t/perf/repos/.gitignore1
-rwxr-xr-xthird_party/git/t/perf/repos/inflate-repo.sh85
-rwxr-xr-xthird_party/git/t/perf/repos/many-files.sh110
-rwxr-xr-xthird_party/git/t/perf/run247
50 files changed, 0 insertions, 3229 deletions
diff --git a/third_party/git/t/perf/.gitignore b/third_party/git/t/perf/.gitignore
deleted file mode 100644
index 982eb8e3a949..000000000000
--- a/third_party/git/t/perf/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/build/
-/test-results/
-/trash directory*/
diff --git a/third_party/git/t/perf/Makefile b/third_party/git/t/perf/Makefile
deleted file mode 100644
index 8c47155a7c86..000000000000
--- a/third_party/git/t/perf/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
--include ../../config.mak
-export GIT_TEST_OPTIONS
-
-all: perf
-
-perf: pre-clean
-	./run
-
-pre-clean:
-	rm -rf test-results
-
-clean:
-	rm -rf build "trash directory".* test-results
-
-.PHONY: all perf pre-clean clean
diff --git a/third_party/git/t/perf/README b/third_party/git/t/perf/README
deleted file mode 100644
index bd649afa9783..000000000000
--- a/third_party/git/t/perf/README
+++ /dev/null
@@ -1,204 +0,0 @@
-Git performance tests
-=====================
-
-This directory holds performance testing scripts for git tools.  The
-first part of this document describes the various ways in which you
-can run them.
-
-When fixing the tools or adding enhancements, you are strongly
-encouraged to add tests in this directory to cover what you are
-trying to fix or enhance.  The later part of this short document
-describes how your test scripts should be organized.
-
-
-Running Tests
--------------
-
-The easiest way to run tests is to say "make".  This runs all
-the tests on the current git repository.
-
-    === Running 2 tests in this tree ===
-    [...]
-    Test                                     this tree
-    ---------------------------------------------------------
-    0001.1: rev-list --all                   0.54(0.51+0.02)
-    0001.2: rev-list --all --objects         6.14(5.99+0.11)
-    7810.1: grep worktree, cheap regex       0.16(0.16+0.35)
-    7810.2: grep worktree, expensive regex   7.90(29.75+0.37)
-    7810.3: grep --cached, cheap regex       3.07(3.02+0.25)
-    7810.4: grep --cached, expensive regex   9.39(30.57+0.24)
-
-You can compare multiple repositories and even git revisions with the
-'run' script:
-
-    $ ./run . origin/next /path/to/git-tree p0001-rev-list.sh
-
-where . stands for the current git tree.  The full invocation is
-
-    ./run [<revision|directory>...] [--] [<test-script>...]
-
-A '.' argument is implied if you do not pass any other
-revisions/directories.
-
-You can also manually test this or another git build tree, and then
-call the aggregation script to summarize the results:
-
-    $ ./p0001-rev-list.sh
-    [...]
-    $ ./run /path/to/other/git -- ./p0001-rev-list.sh
-    [...]
-    $ ./aggregate.perl . /path/to/other/git ./p0001-rev-list.sh
-
-aggregate.perl has the same invocation as 'run', it just does not run
-anything beforehand.
-
-You can set the following variables (also in your config.mak):
-
-    GIT_PERF_REPEAT_COUNT
-	Number of times a test should be repeated for best-of-N
-	measurements.  Defaults to 3.
-
-    GIT_PERF_MAKE_OPTS
-	Options to use when automatically building a git tree for
-	performance testing. E.g., -j6 would be useful. Passed
-	directly to make as "make $GIT_PERF_MAKE_OPTS".
-
-    GIT_PERF_MAKE_COMMAND
-	An arbitrary command that'll be run in place of the make
-	command, if set the GIT_PERF_MAKE_OPTS variable is
-	ignored. Useful in cases where source tree changes might
-	require issuing a different make command to different
-	revisions.
-
-	This can be (ab)used to monkeypatch or otherwise change the
-	tree about to be built. Note that the build directory can be
-	re-used for subsequent runs so the make command might get
-	executed multiple times on the same tree, but don't count on
-	any of that, that's an implementation detail that might change
-	in the future.
-
-    GIT_PERF_REPO
-    GIT_PERF_LARGE_REPO
-	Repositories to copy for the performance tests.  The normal
-	repo should be at least git.git size.  The large repo should
-	probably be about linux.git size for optimal results.
-	Both default to the git.git you are running from.
-
-    GIT_PERF_EXTRA
-	Boolean to enable additional tests. Most test scripts are
-	written to detect regressions between two versions of Git, and
-	the output will compare timings for individual tests between
-	those versions. Some scripts have additional tests which are not
-	run by default, that show patterns within a single version of
-	Git (e.g., performance of index-pack as the number of threads
-	changes). These can be enabled with GIT_PERF_EXTRA.
-
-You can also pass the options taken by ordinary git tests; the most
-useful one is:
-
---root=<directory>::
-	Create "trash" directories used to store all temporary data during
-	testing under <directory>, instead of the t/ directory.
-	Using this option with a RAM-based filesystem (such as tmpfs)
-	can massively speed up the test suite.
-
-
-Naming Tests
-------------
-
-The performance test files are named as:
-
-	pNNNN-commandname-details.sh
-
-where N is a decimal digit.  The same conventions for choosing NNNN as
-for normal tests apply.
-
-
-Writing Tests
--------------
-
-The perf script starts much like a normal test script, except it
-sources perf-lib.sh:
-
-	#!/bin/sh
-	#
-	# Copyright (c) 2005 Junio C Hamano
-	#
-
-	test_description='xxx performance test'
-	. ./perf-lib.sh
-
-After that you will want to use some of the following:
-
-	test_perf_fresh_repo    # sets up an empty repository
-	test_perf_default_repo  # sets up a "normal" repository
-	test_perf_large_repo    # sets up a "large" repository
-
-	test_perf_default_repo sub  # ditto, in a subdir "sub"
-
-        test_checkout_worktree  # if you need the worktree too
-
-At least one of the first two is required!
-
-You can use test_expect_success as usual. In both test_expect_success
-and in test_perf, running "git" points to the version that is being
-perf-tested. The $MODERN_GIT variable points to the git wrapper for the
-currently checked-out version (i.e., the one that matches the t/perf
-scripts you are running).  This is useful if your setup uses commands
-that only work with newer versions of git than what you might want to
-test (but obviously your new commands must still create a state that can
-be used by the older version of git you are testing).
-
-For actual performance tests, use
-
-	test_perf 'descriptive string' '
-		command1 &&
-		command2
-	'
-
-test_perf spawns a subshell, for lack of better options.  This means
-that
-
-* you _must_ export all variables that you need in the subshell
-
-* you _must_ flag all variables that you want to persist from the
-  subshell with 'test_export':
-
-	test_perf 'descriptive string' '
-		foo=$(git rev-parse HEAD) &&
-		test_export foo
-	'
-
-  The so-exported variables are automatically marked for export in the
-  shell executing the perf test.  For your convenience, test_export is
-  the same as export in the main shell.
-
-  This feature relies on a bit of magic using 'set' and 'source'.
-  While we have tried to make sure that it can cope with embedded
-  whitespace and other special characters, it will not work with
-  multi-line data.
-
-Rather than tracking the performance by run-time as `test_perf` does, you
-may also track output size by using `test_size`. The stdout of the
-function should be a single numeric value, which will be captured and
-shown in the aggregated output. For example:
-
-	test_perf 'time foo' '
-		./foo >foo.out
-	'
-
-	test_size 'output size'
-		wc -c <foo.out
-	'
-
-might produce output like:
-
-	Test                origin           HEAD
-	-------------------------------------------------------------
-	1234.1 time foo     0.37(0.79+0.02)  0.26(0.51+0.02) -29.7%
-	1234.2 output size             4.3M             3.6M -14.7%
-
-The item being measured (and its units) is up to the test; the context
-and the test title should make it clear to the user whether bigger or
-smaller numbers are better. Unlike test_perf, the test code will only be
-run once, since output sizes tend to be more deterministic than timings.
diff --git a/third_party/git/t/perf/aggregate.perl b/third_party/git/t/perf/aggregate.perl
deleted file mode 100755
index 14e4cda287d7..000000000000
--- a/third_party/git/t/perf/aggregate.perl
+++ /dev/null
@@ -1,356 +0,0 @@
-#!/usr/bin/perl
-
-use lib '../../perl/build/lib';
-use strict;
-use warnings;
-use Getopt::Long;
-use Cwd qw(realpath);
-
-sub get_times {
-	my $name = shift;
-	open my $fh, "<", $name or return undef;
-	my $line = <$fh>;
-	return undef if not defined $line;
-	close $fh or die "cannot close $name: $!";
-	# times
-	if ($line =~ /^(?:(\d+):)?(\d+):(\d+(?:\.\d+)?) (\d+(?:\.\d+)?) (\d+(?:\.\d+)?)$/) {
-		my $rt = ((defined $1 ? $1 : 0.0)*60+$2)*60+$3;
-		return ($rt, $4, $5);
-	# size
-	} elsif ($line =~ /^\d+$/) {
-		return $&;
-	} else {
-		die "bad input line: $line";
-	}
-}
-
-sub relative_change {
-	my ($r, $firstr) = @_;
-	if ($firstr > 0) {
-		return sprintf "%+.1f%%", 100.0*($r-$firstr)/$firstr;
-	} elsif ($r == 0) {
-		return "=";
-	} else {
-		return "+inf";
-	}
-}
-
-sub format_times {
-	my ($r, $u, $s, $firstr) = @_;
-	# no value means we did not finish the test
-	if (!defined $r) {
-		return "<missing>";
-	}
-	# a single value means we have a size, not times
-	if (!defined $u) {
-		return format_size($r, $firstr);
-	}
-	# otherwise, we have real/user/system times
-	my $out = sprintf "%.2f(%.2f+%.2f)", $r, $u, $s;
-	$out .= ' ' . relative_change($r, $firstr) if defined $firstr;
-	return $out;
-}
-
-sub usage {
-	print <<EOT;
-./aggregate.perl [options] [--] [<dir_or_rev>...] [--] [<test_script>...] >
-
-  Options:
-    --codespeed          * Format output for Codespeed
-    --reponame    <str>  * Send given reponame to codespeed
-    --sort-by     <str>  * Sort output (only "regression" criteria is supported)
-    --subsection  <str>  * Use results from given subsection
-
-EOT
-	exit(1);
-}
-
-sub human_size {
-	my $n = shift;
-	my @units = ('', qw(K M G));
-	while ($n > 900 && @units > 1) {
-		$n /= 1000;
-		shift @units;
-	}
-	return $n unless length $units[0];
-	return sprintf '%.1f%s', $n, $units[0];
-}
-
-sub format_size {
-	my ($size, $first) = @_;
-	# match the width of a time: 0.00(0.00+0.00)
-	my $out = sprintf '%15s', human_size($size);
-	$out .= ' ' . relative_change($size, $first) if defined $first;
-	return $out;
-}
-
-sub sane_backticks {
-	open(my $fh, '-|', @_);
-	return <$fh>;
-}
-
-my (@dirs, %dirnames, %dirabbrevs, %prefixes, @tests,
-    $codespeed, $sortby, $subsection, $reponame);
-
-Getopt::Long::Configure qw/ require_order /;
-
-my $rc = GetOptions("codespeed"     => \$codespeed,
-		    "reponame=s"    => \$reponame,
-		    "sort-by=s"     => \$sortby,
-		    "subsection=s"  => \$subsection);
-usage() unless $rc;
-
-while (scalar @ARGV) {
-	my $arg = $ARGV[0];
-	my $dir;
-	my $prefix = '';
-	last if -f $arg or $arg eq "--";
-	if (! -d $arg) {
-		my $rev = sane_backticks(qw(git rev-parse --verify), $arg);
-		chomp $rev;
-		$dir = "build/".$rev;
-	} elsif ($arg eq '.') {
-		$dir = '.';
-	} else {
-		$dir = realpath($arg);
-		$dirnames{$dir} = $dir;
-		$prefix .= 'bindir';
-	}
-	push @dirs, $dir;
-	$dirnames{$dir} ||= $arg;
-	$prefix .= $dir;
-	$prefix =~ tr/^a-zA-Z0-9/_/c;
-	$prefixes{$dir} = $prefix . '.';
-	shift @ARGV;
-}
-
-if (not @dirs) {
-	@dirs = ('.');
-}
-$dirnames{'.'} = $dirabbrevs{'.'} = "this tree";
-$prefixes{'.'} = '';
-
-shift @ARGV if scalar @ARGV and $ARGV[0] eq "--";
-
-@tests = @ARGV;
-if (not @tests) {
-	@tests = glob "p????-*.sh";
-}
-
-my $resultsdir = "test-results";
-
-if (! $subsection and
-    exists $ENV{GIT_PERF_SUBSECTION} and
-    $ENV{GIT_PERF_SUBSECTION} ne "") {
-	$subsection = $ENV{GIT_PERF_SUBSECTION};
-}
-
-if ($subsection) {
-	$resultsdir .= "/" . $subsection;
-}
-
-my @subtests;
-my %shorttests;
-for my $t (@tests) {
-	$t =~ s{(?:.*/)?(p(\d+)-[^/]+)\.sh$}{$1} or die "bad test name: $t";
-	my $n = $2;
-	my $fname = "$resultsdir/$t.subtests";
-	open my $fp, "<", $fname or die "cannot open $fname: $!";
-	for (<$fp>) {
-		chomp;
-		/^(\d+)$/ or die "malformed subtest line: $_";
-		push @subtests, "$t.$1";
-		$shorttests{"$t.$1"} = "$n.$1";
-	}
-	close $fp or die "cannot close $fname: $!";
-}
-
-sub read_descr {
-	my $name = shift;
-	open my $fh, "<", $name or return "<error reading description>";
-	binmode $fh, ":utf8" or die "PANIC on binmode: $!";
-	my $line = <$fh>;
-	close $fh or die "cannot close $name";
-	chomp $line;
-	return $line;
-}
-
-sub have_duplicate {
-	my %seen;
-	for (@_) {
-		return 1 if exists $seen{$_};
-		$seen{$_} = 1;
-	}
-	return 0;
-}
-sub have_slash {
-	for (@_) {
-		return 1 if m{/};
-	}
-	return 0;
-}
-
-sub display_dir {
-	my ($d) = @_;
-	return exists $dirabbrevs{$d} ? $dirabbrevs{$d} : $dirnames{$d};
-}
-
-sub print_default_results {
-	my %descrs;
-	my $descrlen = 4; # "Test"
-	for my $t (@subtests) {
-		$descrs{$t} = $shorttests{$t}.": ".read_descr("$resultsdir/$t.descr");
-		$descrlen = length $descrs{$t} if length $descrs{$t}>$descrlen;
-	}
-
-	my %newdirabbrevs = %dirabbrevs;
-	while (!have_duplicate(values %newdirabbrevs)) {
-		%dirabbrevs = %newdirabbrevs;
-		last if !have_slash(values %dirabbrevs);
-		%newdirabbrevs = %dirabbrevs;
-		for (values %newdirabbrevs) {
-			s{^[^/]*/}{};
-		}
-	}
-
-	my %times;
-	my @colwidth = ((0)x@dirs);
-	for my $i (0..$#dirs) {
-		my $w = length display_dir($dirs[$i]);
-		$colwidth[$i] = $w if $w > $colwidth[$i];
-	}
-	for my $t (@subtests) {
-		my $firstr;
-		for my $i (0..$#dirs) {
-			my $d = $dirs[$i];
-			my $base = "$resultsdir/$prefixes{$d}$t";
-			$times{$prefixes{$d}.$t} = [get_times("$base.result")];
-			my ($r,$u,$s) = @{$times{$prefixes{$d}.$t}};
-			my $w = length format_times($r,$u,$s,$firstr);
-			$colwidth[$i] = $w if $w > $colwidth[$i];
-			$firstr = $r unless defined $firstr;
-		}
-	}
-	my $totalwidth = 3*@dirs+$descrlen;
-	$totalwidth += $_ for (@colwidth);
-
-	printf "%-${descrlen}s", "Test";
-	for my $i (0..$#dirs) {
-		printf "   %-$colwidth[$i]s", display_dir($dirs[$i]);
-	}
-	print "\n";
-	print "-"x$totalwidth, "\n";
-	for my $t (@subtests) {
-		printf "%-${descrlen}s", $descrs{$t};
-		my $firstr;
-		for my $i (0..$#dirs) {
-			my $d = $dirs[$i];
-			my ($r,$u,$s) = @{$times{$prefixes{$d}.$t}};
-			printf "   %-$colwidth[$i]s", format_times($r,$u,$s,$firstr);
-			$firstr = $r unless defined $firstr;
-		}
-		print "\n";
-	}
-}
-
-sub print_sorted_results {
-	my ($sortby) = @_;
-
-	if ($sortby ne "regression") {
-		print "Only 'regression' is supported as '--sort-by' argument\n";
-		usage();
-	}
-
-	my @evolutions;
-	for my $t (@subtests) {
-		my ($prevr, $prevu, $prevs, $prevrev);
-		for my $i (0..$#dirs) {
-			my $d = $dirs[$i];
-			my ($r, $u, $s) = get_times("$resultsdir/$prefixes{$d}$t.result");
-			if ($i > 0 and defined $r and defined $prevr and $prevr > 0) {
-				my $percent = 100.0 * ($r - $prevr) / $prevr;
-				push @evolutions, { "percent"  => $percent,
-						    "test"     => $t,
-						    "prevrev"  => $prevrev,
-						    "rev"      => $d,
-						    "prevr"    => $prevr,
-						    "r"        => $r,
-						    "prevu"    => $prevu,
-						    "u"        => $u,
-						    "prevs"    => $prevs,
-						    "s"        => $s};
-			}
-			($prevr, $prevu, $prevs, $prevrev) = ($r, $u, $s, $d);
-		}
-	}
-
-	my @sorted_evolutions = sort { $b->{percent} <=> $a->{percent} } @evolutions;
-
-	for my $e (@sorted_evolutions) {
-		printf "%+.1f%%", $e->{percent};
-		print " " . $e->{test};
-		print " " . format_times($e->{prevr}, $e->{prevu}, $e->{prevs});
-		print " " . format_times($e->{r}, $e->{u}, $e->{s});
-		print " " . display_dir($e->{prevrev});
-		print " " . display_dir($e->{rev});
-		print "\n";
-	}
-}
-
-sub print_codespeed_results {
-	my ($subsection) = @_;
-
-	my $project = "Git";
-
-	my $executable = `uname -s -m`;
-	chomp $executable;
-
-	if ($subsection) {
-		$executable .= ", " . $subsection;
-	}
-
-	my $environment;
-	if ($reponame) {
-		$environment = $reponame;
-	} elsif (exists $ENV{GIT_PERF_REPO_NAME} and $ENV{GIT_PERF_REPO_NAME} ne "") {
-		$environment = $ENV{GIT_PERF_REPO_NAME};
-	} else {
-		$environment = `uname -r`;
-		chomp $environment;
-	}
-
-	my @data;
-
-	for my $t (@subtests) {
-		for my $d (@dirs) {
-			my $commitid = $prefixes{$d};
-			$commitid =~ s/^build_//;
-			$commitid =~ s/\.$//;
-			my ($result_value, $u, $s) = get_times("$resultsdir/$prefixes{$d}$t.result");
-
-			my %vals = (
-				"commitid" => $commitid,
-				"project" => $project,
-				"branch" => $dirnames{$d},
-				"executable" => $executable,
-				"benchmark" => $shorttests{$t} . " " . read_descr("$resultsdir/$t.descr"),
-				"environment" => $environment,
-				"result_value" => $result_value,
-			    );
-			push @data, \%vals;
-		}
-	}
-
-	require JSON;
-	print JSON::to_json(\@data, {utf8 => 1, pretty => 1, canonical => 1}), "\n";
-}
-
-binmode STDOUT, ":utf8" or die "PANIC on binmode: $!";
-
-if ($codespeed) {
-	print_codespeed_results($subsection);
-} elsif (defined $sortby) {
-	print_sorted_results($sortby);
-} else {
-	print_default_results();
-}
diff --git a/third_party/git/t/perf/bisect_regression b/third_party/git/t/perf/bisect_regression
deleted file mode 100755
index ce47e1662a92..000000000000
--- a/third_party/git/t/perf/bisect_regression
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/sh
-
-# Read a line coming from `./aggregate.perl --sort-by regression ...`
-# and automatically bisect to find the commit responsible for the
-# performance regression.
-#
-# Lines from `./aggregate.perl --sort-by regression ...` look like:
-#
-# +100.0% p7821-grep-engines-fixed.1 0.04(0.10+0.03) 0.08(0.11+0.08) v2.14.3 v2.15.1
-# +33.3% p7820-grep-engines.1 0.03(0.08+0.02) 0.04(0.08+0.02) v2.14.3 v2.15.1
-#
-
-die () {
-	echo >&2 "error: $*"
-	exit 1
-}
-
-while [ $# -gt 0 ]; do
-	arg="$1"
-	case "$arg" in
-	--help)
-		echo "usage: $0 [--config file] [--subsection subsection]"
-		exit 0
-		;;
-	--config)
-		shift
-		GIT_PERF_CONFIG_FILE=$(cd "$(dirname "$1")"; pwd)/$(basename "$1")
-		export GIT_PERF_CONFIG_FILE
-		shift ;;
-	--subsection)
-		shift
-		GIT_PERF_SUBSECTION="$1"
-		export GIT_PERF_SUBSECTION
-		shift ;;
-	--*)
-		die "unrecognised option: '$arg'" ;;
-	*)
-		die "unknown argument '$arg'"
-		;;
-	esac
-done
-
-read -r regression subtest oldtime newtime oldrev newrev
-
-test_script=$(echo "$subtest" | sed -e 's/\(.*\)\.[0-9]*$/\1.sh/')
-test_number=$(echo "$subtest" | sed -e 's/.*\.\([0-9]*\)$/\1/')
-
-# oldtime and newtime are decimal number, not integers
-
-oldtime=$(echo "$oldtime" | sed -e 's/^\([0-9]\+\.[0-9]\+\).*$/\1/')
-newtime=$(echo "$newtime" | sed -e 's/^\([0-9]\+\.[0-9]\+\).*$/\1/')
-
-test $(echo "$newtime" "$oldtime" | awk '{ print ($1 > $2) }') = 1 ||
-	die "New time '$newtime' should be greater than old time '$oldtime'"
-
-tmpdir=$(mktemp -d -t bisect_regression_XXXXXX) || die "Failed to create temp directory"
-echo "$oldtime" >"$tmpdir/oldtime" || die "Failed to write to '$tmpdir/oldtime'"
-echo "$newtime" >"$tmpdir/newtime" || die "Failed to write to '$tmpdir/newtime'"
-
-# Bisecting must be performed from the top level directory (even with --no-checkout)
-(
-	toplevel_dir=$(git rev-parse --show-toplevel) || die "Failed to find top level directory"
-	cd "$toplevel_dir" || die "Failed to cd into top level directory '$toplevel_dir'"
-
-	git bisect start --no-checkout "$newrev" "$oldrev" || die "Failed to start bisecting"
-
-	git bisect run t/perf/bisect_run_script "$test_script" "$test_number" "$tmpdir"
-	res="$?"
-
-	git bisect reset
-
-	exit "$res"
-)
diff --git a/third_party/git/t/perf/bisect_run_script b/third_party/git/t/perf/bisect_run_script
deleted file mode 100755
index 3ebaf1552148..000000000000
--- a/third_party/git/t/perf/bisect_run_script
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-
-script="$1"
-test_number="$2"
-info_dir="$3"
-
-# This aborts the bisection immediately
-die () {
-	echo >&2 "error: $*"
-	exit 255
-}
-
-bisect_head=$(git rev-parse --verify BISECT_HEAD) || die "Failed to find BISECT_HEAD ref"
-
-script_number=$(echo "$script" | sed -e "s/^p\([0-9]*\).*\$/\1/") || die "Failed to get script number for '$script'"
-
-oldtime=$(cat "$info_dir/oldtime") || die "Failed to access '$info_dir/oldtime'"
-newtime=$(cat "$info_dir/newtime") || die "Failed to access '$info_dir/newtime'"
-
-cd t/perf || die "Failed to cd into 't/perf'"
-
-result_file="$info_dir/perf_${script_number}_${bisect_head}_results.txt"
-
-GIT_PERF_DIRS_OR_REVS="$bisect_head"
-export GIT_PERF_DIRS_OR_REVS
-
-# Don't use codespeed
-GIT_PERF_CODESPEED_OUTPUT=
-GIT_PERF_SEND_TO_CODESPEED=
-export GIT_PERF_CODESPEED_OUTPUT
-export GIT_PERF_SEND_TO_CODESPEED
-
-./run "$script" >"$result_file" 2>&1 || die "Failed to run perf test '$script'"
-
-rtime=$(sed -n "s/^$script_number\.$test_number:.*\([0-9]\+\.[0-9]\+\)(.*).*\$/\1/p" "$result_file")
-
-echo "newtime: $newtime"
-echo "rtime: $rtime"
-echo "oldtime: $oldtime"
-
-# Compare ($newtime - $rtime) with ($rtime - $oldtime)
-# Times are decimal number, not integers
-
-if test $(echo "$newtime" "$rtime" "$oldtime" | awk '{ print ($1 - $2 > $2 - $3) }') = 1
-then
-	# Current commit is considered "good/old"
-	echo "$rtime" >"$info_dir/oldtime"
-	exit 0
-else
-	# Current commit is considered "bad/new"
-	echo "$rtime" >"$info_dir/newtime"
-	exit 1
-fi
diff --git a/third_party/git/t/perf/lib-pack.sh b/third_party/git/t/perf/lib-pack.sh
deleted file mode 100644
index d3865db286fc..000000000000
--- a/third_party/git/t/perf/lib-pack.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-# Helpers for dealing with large numbers of packs.
-
-# create $1 nonsense packs, each with a single blob
-create_packs () {
-	perl -le '
-		my ($n) = @ARGV;
-		for (1..$n) {
-			print "blob";
-			print "data <<EOF";
-			print "$_";
-			print "EOF";
-			print "checkpoint"
-		}
-	' "$@" |
-	git fast-import
-}
-
-# create a large number of packs, disabling any gc which might
-# cause us to repack them
-setup_many_packs () {
-	git config gc.auto 0 &&
-	git config gc.autopacklimit 0 &&
-	git config fastimport.unpacklimit 0 &&
-	create_packs 500
-}
diff --git a/third_party/git/t/perf/min_time.perl b/third_party/git/t/perf/min_time.perl
deleted file mode 100755
index c1a2717e0772..000000000000
--- a/third_party/git/t/perf/min_time.perl
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/perl
-
-my $minrt = 1e100;
-my $min;
-
-while (<>) {
-	# [h:]m:s.xx U.xx S.xx
-	/^(?:(\d+):)?(\d+):(\d+(?:\.\d+)?) (\d+(?:\.\d+)?) (\d+(?:\.\d+)?)$/
-		or die "bad input line: $_";
-	my $rt = ((defined $1 ? $1 : 0.0)*60+$2)*60+$3;
-	if ($rt < $minrt) {
-		$min = $_;
-		$minrt = $rt;
-	}
-}
-
-if (!defined $min) {
-	die "no input found";
-}
-
-print $min;
diff --git a/third_party/git/t/perf/p0000-perf-lib-sanity.sh b/third_party/git/t/perf/p0000-perf-lib-sanity.sh
deleted file mode 100755
index 002c21e52a67..000000000000
--- a/third_party/git/t/perf/p0000-perf-lib-sanity.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/sh
-
-test_description='Tests whether perf-lib facilities work'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_perf 'test_perf_default_repo works' '
-	foo=$(git rev-parse HEAD) &&
-	test_export foo
-'
-
-test_checkout_worktree
-
-test_perf 'test_checkout_worktree works' '
-	wt=$(find . | wc -l) &&
-	idx=$(git ls-files | wc -l) &&
-	test $wt -gt $idx
-'
-
-baz=baz
-test_export baz
-
-test_expect_success 'test_export works' '
-	echo "$foo" &&
-	test "$foo" = "$(git rev-parse HEAD)" &&
-	echo "$baz" &&
-	test "$baz" = baz
-'
-
-test_perf 'export a weird var' '
-	bar="weird # variable" &&
-	test_export bar
-'
-
-test_perf 'éḿíẗ ńöń-ÁŚĆÍÍ ćḧáŕáćẗéŕś' 'true'
-
-test_expect_success 'test_export works with weird vars' '
-	echo "$bar" &&
-	test "$bar" = "weird # variable"
-'
-
-test_perf 'important variables available in subshells' '
-	test -n "$HOME" &&
-	test -n "$TEST_DIRECTORY" &&
-	test -n "$TRASH_DIRECTORY" &&
-	test -n "$GIT_BUILD_DIR"
-'
-
-test_perf 'test-lib-functions correctly loaded in subshells' '
-	: >a &&
-	test_path_is_file a &&
-	: >b &&
-	test_cmp a b
-'
-
-test_done
diff --git a/third_party/git/t/perf/p0001-rev-list.sh b/third_party/git/t/perf/p0001-rev-list.sh
deleted file mode 100755
index 3042a85666ce..000000000000
--- a/third_party/git/t/perf/p0001-rev-list.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-
-test_description="Tests history walking performance"
-
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_perf 'rev-list --all' '
-	git rev-list --all >/dev/null
-'
-
-test_perf 'rev-list --all --objects' '
-	git rev-list --all --objects >/dev/null
-'
-
-test_perf 'rev-list --parents' '
-	git rev-list --parents HEAD >/dev/null
-'
-
-test_expect_success 'create dummy file' '
-	echo unlikely-to-already-be-there >dummy &&
-	git add dummy &&
-	git commit -m dummy
-'
-
-test_perf 'rev-list -- dummy' '
-	git rev-list HEAD -- dummy
-'
-
-test_perf 'rev-list --parents -- dummy' '
-	git rev-list --parents HEAD -- dummy
-'
-
-test_expect_success 'create new unreferenced commit' '
-	commit=$(git commit-tree HEAD^{tree} -p HEAD) &&
-	test_export commit
-'
-
-test_perf 'rev-list $commit --not --all' '
-	git rev-list $commit --not --all >/dev/null
-'
-
-test_perf 'rev-list --objects $commit --not --all' '
-	git rev-list --objects $commit --not --all >/dev/null
-'
-
-test_done
diff --git a/third_party/git/t/perf/p0002-read-cache.sh b/third_party/git/t/perf/p0002-read-cache.sh
deleted file mode 100755
index cdd105a59452..000000000000
--- a/third_party/git/t/perf/p0002-read-cache.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-test_description="Tests performance of reading the index"
-
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-count=1000
-test_perf "read_cache/discard_cache $count times" "
-	test-tool read-cache $count
-"
-
-test_done
diff --git a/third_party/git/t/perf/p0003-delta-base-cache.sh b/third_party/git/t/perf/p0003-delta-base-cache.sh
deleted file mode 100755
index 62369eaaf0d9..000000000000
--- a/third_party/git/t/perf/p0003-delta-base-cache.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-
-test_description='Test operations that emphasize the delta base cache.
-
-We look at both "log --raw", which should put only trees into the delta cache,
-and "log -Sfoo --raw", which should look at both trees and blobs.
-
-Any effects will be emphasized if the test repository is fully packed (loose
-objects obviously do not use the delta base cache at all). It is also
-emphasized if the pack has long delta chains (e.g., as produced by "gc
---aggressive"), though cache is still quite noticeable even with the default
-depth of 50.
-
-The setting of core.deltaBaseCacheLimit in the source repository is also
-relevant (depending on the size of your test repo), so be sure it is consistent
-between runs.
-'
-. ./perf-lib.sh
-
-test_perf_large_repo
-
-# puts mostly trees into the delta base cache
-test_perf 'log --raw' '
-	git log --raw >/dev/null
-'
-
-test_perf 'log -S' '
-	git log --raw -Sfoo >/dev/null
-'
-
-test_done
diff --git a/third_party/git/t/perf/p0004-lazy-init-name-hash.sh b/third_party/git/t/perf/p0004-lazy-init-name-hash.sh
deleted file mode 100755
index 1afc08fe7f19..000000000000
--- a/third_party/git/t/perf/p0004-lazy-init-name-hash.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-
-test_description='Tests multi-threaded lazy_init_name_hash'
-. ./perf-lib.sh
-
-test_perf_large_repo
-test_checkout_worktree
-
-test_expect_success 'verify both methods build the same hashmaps' '
-	test-tool lazy-init-name-hash --dump --single >out.single &&
-	if test-tool lazy-init-name-hash --dump --multi >out.multi
-	then
-		test_set_prereq REPO_BIG_ENOUGH_FOR_MULTI &&
-		sort <out.single >sorted.single &&
-		sort <out.multi >sorted.multi &&
-		test_cmp sorted.single sorted.multi
-	fi
-'
-
-test_expect_success 'calibrate' '
-	entries=$(wc -l <out.single) &&
-
-	case $entries in
-	?) count=1000000 ;;
-	??) count=100000 ;;
-	???) count=10000 ;;
-	????) count=1000 ;;
-	?????) count=100 ;;
-	??????) count=10 ;;
-	*) count=1 ;;
-	esac &&
-	export count &&
-
-	case $entries in
-	1) entries_desc="1 entry" ;;
-	*) entries_desc="$entries entries" ;;
-	esac &&
-
-	case $count in
-	1) count_desc="1 round" ;;
-	*) count_desc="$count rounds" ;;
-	esac &&
-
-	desc="$entries_desc, $count_desc" &&
-	export desc
-'
-
-test_perf "single-threaded, $desc" "
-	test-tool lazy-init-name-hash --single --count=$count
-"
-
-test_perf REPO_BIG_ENOUGH_FOR_MULTI "multi-threaded, $desc" "
-	test-tool lazy-init-name-hash --multi --count=$count
-"
-
-test_done
diff --git a/third_party/git/t/perf/p0005-status.sh b/third_party/git/t/perf/p0005-status.sh
deleted file mode 100755
index 0b0aa9858f5d..000000000000
--- a/third_party/git/t/perf/p0005-status.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/sh
-#
-# This test measures the performance of various read-tree
-# and status operations.  It is primarily interested in
-# the algorithmic costs of index operations and recursive
-# tree traversal -- and NOT disk I/O on thousands of files.
-
-test_description="Tests performance of read-tree"
-
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-# If the test repo was generated by ./repos/many-files.sh
-# then we know something about the data shape and branches,
-# so we can isolate testing to the ballast-related commits
-# and setup sparse-checkout so we don't have to populate
-# the ballast files and directories.
-#
-# Otherwise, we make some general assumptions about the
-# repo and consider the entire history of the current
-# branch to be the ballast.
-
-test_expect_success "setup repo" '
-	if git rev-parse --verify refs/heads/p0006-ballast^{commit}
-	then
-		echo Assuming synthetic repo from many-files.sh
-		git branch br_base            master
-		git branch br_ballast         p0006-ballast
-		git config --local core.sparsecheckout 1
-		cat >.git/info/sparse-checkout <<-EOF
-		/*
-		!ballast/*
-		EOF
-	else
-		echo Assuming non-synthetic repo...
-		git branch br_base            $(git rev-list HEAD | tail -n 1)
-		git branch br_ballast         HEAD
-	fi &&
-	git checkout -q br_ballast &&
-	nr_files=$(git ls-files | wc -l)
-'
-
-test_perf "read-tree status br_ballast ($nr_files)" '
-	git read-tree HEAD &&
-	git status
-'
-
-test_done
diff --git a/third_party/git/t/perf/p0006-read-tree-checkout.sh b/third_party/git/t/perf/p0006-read-tree-checkout.sh
deleted file mode 100755
index 78cc23fe2f32..000000000000
--- a/third_party/git/t/perf/p0006-read-tree-checkout.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/sh
-#
-# This test measures the performance of various read-tree
-# and checkout operations.  It is primarily interested in
-# the algorithmic costs of index operations and recursive
-# tree traversal -- and NOT disk I/O on thousands of files.
-
-test_description="Tests performance of read-tree"
-
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-# If the test repo was generated by ./repos/many-files.sh
-# then we know something about the data shape and branches,
-# so we can isolate testing to the ballast-related commits
-# and setup sparse-checkout so we don't have to populate
-# the ballast files and directories.
-#
-# Otherwise, we make some general assumptions about the
-# repo and consider the entire history of the current
-# branch to be the ballast.
-
-test_expect_success "setup repo" '
-	if git rev-parse --verify refs/heads/p0006-ballast^{commit}
-	then
-		echo Assuming synthetic repo from many-files.sh
-		git branch br_base            master
-		git branch br_ballast         p0006-ballast^
-		git branch br_ballast_alias   p0006-ballast^
-		git branch br_ballast_plus_1  p0006-ballast
-		git config --local core.sparsecheckout 1
-		cat >.git/info/sparse-checkout <<-EOF
-		/*
-		!ballast/*
-		EOF
-	else
-		echo Assuming non-synthetic repo...
-		git branch br_base            $(git rev-list HEAD | tail -n 1)
-		git branch br_ballast         HEAD^ || error "no ancestor commit from current head"
-		git branch br_ballast_alias   HEAD^
-		git branch br_ballast_plus_1  HEAD
-	fi &&
-	git checkout -q br_ballast &&
-	nr_files=$(git ls-files | wc -l)
-'
-
-test_perf "read-tree br_base br_ballast ($nr_files)" '
-	git read-tree -m br_base br_ballast -n
-'
-
-test_perf "switch between br_base br_ballast ($nr_files)" '
-	git checkout -q br_base &&
-	git checkout -q br_ballast
-'
-
-test_perf "switch between br_ballast br_ballast_plus_1 ($nr_files)" '
-	git checkout -q br_ballast_plus_1 &&
-	git checkout -q br_ballast
-'
-
-test_perf "switch between aliases ($nr_files)" '
-	git checkout -q br_ballast_alias &&
-	git checkout -q br_ballast
-'
-
-test_done
diff --git a/third_party/git/t/perf/p0007-write-cache.sh b/third_party/git/t/perf/p0007-write-cache.sh
deleted file mode 100755
index 09595264f09f..000000000000
--- a/third_party/git/t/perf/p0007-write-cache.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-test_description="Tests performance of writing the index"
-
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_expect_success "setup repo" '
-	if git rev-parse --verify refs/heads/p0006-ballast^{commit}
-	then
-		echo Assuming synthetic repo from many-files.sh
-		git config --local core.sparsecheckout 1
-		cat >.git/info/sparse-checkout <<-EOF
-		/*
-		!ballast/*
-		EOF
-	else
-		echo Assuming non-synthetic repo...
-	fi &&
-	nr_files=$(git ls-files | wc -l)
-'
-
-count=3
-test_perf "write_locked_index $count times ($nr_files files)" "
-	test-tool write-cache $count
-"
-
-test_done
diff --git a/third_party/git/t/perf/p0071-sort.sh b/third_party/git/t/perf/p0071-sort.sh
deleted file mode 100755
index 6e924f5fa3f9..000000000000
--- a/third_party/git/t/perf/p0071-sort.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-test_description='Basic sort performance tests'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_expect_success 'setup' '
-	git ls-files --stage "*.[ch]" "*.sh" |
-	cut -f2 -d" " |
-	git cat-file --batch >unsorted
-'
-
-test_perf 'sort(1)' '
-	sort <unsorted >expect
-'
-
-test_perf 'string_list_sort()' '
-	test-tool string-list sort <unsorted >actual
-'
-
-test_expect_success 'string_list_sort() sorts like sort(1)' '
-	test_cmp_bin expect actual
-'
-
-test_done
diff --git a/third_party/git/t/perf/p0100-globbing.sh b/third_party/git/t/perf/p0100-globbing.sh
deleted file mode 100755
index dd18a9ce2b11..000000000000
--- a/third_party/git/t/perf/p0100-globbing.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh
-
-test_description="Tests pathological globbing performance
-
-Shows how Git's globbing performance performs when given the sort of
-pathological patterns described in at https://research.swtch.com/glob
-"
-
-. ./perf-lib.sh
-
-test_globs_big='10 25 50 75 100'
-test_globs_small='1 2 3 4 5 6'
-
-test_perf_fresh_repo
-
-test_expect_success 'setup' '
-	for i in $(test_seq 1 100)
-	do
-		printf "a" >>refname &&
-		for j in $(test_seq 1 $i)
-		do
-			printf "a*" >>refglob.$i
-		done &&
-		echo b >>refglob.$i
-	done &&
-	test_commit test $(cat refname).t "" $(cat refname).t
-'
-
-for i in $test_globs_small
-do
-	test_perf "refglob((a*)^nb) against tag (a^100).t; n = $i" '
-		git for-each-ref "refs/tags/$(cat refglob.'$i')b"
-	'
-done
-
-for i in $test_globs_small
-do
-	test_perf "fileglob((a*)^nb) against file (a^100).t; n = $i" '
-		git ls-files "$(cat refglob.'$i')b"
-	'
-done
-
-test_done
diff --git a/third_party/git/t/perf/p1400-update-ref.sh b/third_party/git/t/perf/p1400-update-ref.sh
deleted file mode 100755
index ce5ac3ed85e1..000000000000
--- a/third_party/git/t/perf/p1400-update-ref.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-test_description="Tests performance of update-ref"
-
-. ./perf-lib.sh
-
-test_perf_fresh_repo
-
-test_expect_success "setup" '
-	git init --bare target-repo.git &&
-	test_commit PRE &&
-	test_commit POST &&
-	printf "create refs/heads/%d PRE\n" $(test_seq 1000) >create &&
-	printf "update refs/heads/%d POST PRE\n" $(test_seq 1000) >update &&
-	printf "delete refs/heads/%d POST\n" $(test_seq 1000) >delete &&
-	git update-ref --stdin <create
-'
-
-test_perf "update-ref" '
-	for i in $(test_seq 1000)
-	do
-		git update-ref refs/heads/branch PRE &&
-		git update-ref refs/heads/branch POST PRE &&
-		git update-ref -d refs/heads/branch
-	done
-'
-
-test_perf "update-ref --stdin" '
-	git update-ref --stdin <update &&
-	git update-ref --stdin <delete &&
-	git update-ref --stdin <create
-'
-
-test_perf "nonatomic push" '
-	git push ./target-repo.git $(test_seq 1000) &&
-	git push --delete ./target-repo.git $(test_seq 1000)
-'
-
-test_done
diff --git a/third_party/git/t/perf/p1450-fsck.sh b/third_party/git/t/perf/p1450-fsck.sh
deleted file mode 100755
index ae1b84198bbc..000000000000
--- a/third_party/git/t/perf/p1450-fsck.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-
-test_description='Test fsck performance'
-
-. ./perf-lib.sh
-
-test_perf_large_repo
-
-test_perf 'fsck' '
-	git fsck
-'
-
-test_done
diff --git a/third_party/git/t/perf/p1451-fsck-skip-list.sh b/third_party/git/t/perf/p1451-fsck-skip-list.sh
deleted file mode 100755
index c2b97d2487bb..000000000000
--- a/third_party/git/t/perf/p1451-fsck-skip-list.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/sh
-
-test_description='Test fsck skipList performance'
-
-. ./perf-lib.sh
-
-test_perf_fresh_repo
-
-n=1000000
-
-test_expect_success "setup $n bad commits" '
-	for i in $(test_seq 1 $n)
-	do
-		echo "commit refs/heads/master" &&
-		echo "committer C <c@example.com> 1234567890 +0000" &&
-		echo "data <<EOF" &&
-		echo "$i.Q." &&
-		echo "EOF"
-	done | q_to_nul | git fast-import
-'
-
-skip=0
-while test $skip -le $n
-do
-	test_expect_success "create skipList for $skip bad commits" '
-		git log --format=%H --max-count=$skip |
-		sort >skiplist
-	'
-
-	test_perf "fsck with $skip skipped bad commits" '
-		git -c fsck.skipList=skiplist fsck
-	'
-
-	case $skip in
-	0) skip=1 ;;
-	*) skip=${skip}0 ;;
-	esac
-done
-
-test_done
diff --git a/third_party/git/t/perf/p3400-rebase.sh b/third_party/git/t/perf/p3400-rebase.sh
deleted file mode 100755
index d202aaed06fc..000000000000
--- a/third_party/git/t/perf/p3400-rebase.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/sh
-
-test_description='Tests rebase performance'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_expect_success 'setup rebasing on top of a lot of changes' '
-	git checkout -f -B base &&
-	git checkout -B to-rebase &&
-	git checkout -B upstream &&
-	for i in $(seq 100)
-	do
-		# simulate huge diffs
-		echo change$i >unrelated-file$i &&
-		seq 1000 >>unrelated-file$i &&
-		git add unrelated-file$i &&
-		test_tick &&
-		git commit -m commit$i unrelated-file$i &&
-		echo change$i >unrelated-file$i &&
-		seq 1000 | tac >>unrelated-file$i &&
-		git add unrelated-file$i &&
-		test_tick &&
-		git commit -m commit$i-reverse unrelated-file$i ||
-		break
-	done &&
-	git checkout to-rebase &&
-	test_commit our-patch interesting-file
-'
-
-test_perf 'rebase on top of a lot of unrelated changes' '
-	git rebase --onto upstream HEAD^ &&
-	git rebase --onto base HEAD^
-'
-
-test_expect_success 'setup rebasing many changes without split-index' '
-	git config core.splitIndex false &&
-	git checkout -B upstream2 to-rebase &&
-	git checkout -B to-rebase2 upstream
-'
-
-test_perf 'rebase a lot of unrelated changes without split-index' '
-	git rebase --onto upstream2 base &&
-	git rebase --onto base upstream2
-'
-
-test_expect_success 'setup rebasing many changes with split-index' '
-	git config core.splitIndex true
-'
-
-test_perf 'rebase a lot of unrelated changes with split-index' '
-	git rebase --onto upstream2 base &&
-	git rebase --onto base upstream2
-'
-
-test_done
diff --git a/third_party/git/t/perf/p3404-rebase-interactive.sh b/third_party/git/t/perf/p3404-rebase-interactive.sh
deleted file mode 100755
index 88f47de282c1..000000000000
--- a/third_party/git/t/perf/p3404-rebase-interactive.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-
-test_description='Tests rebase -i performance'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-# This commit merges a sufficiently long topic branch for reasonable
-# performance testing
-branch_merge=ba5312da19c6fdb6c6747d479f58932aae6e900c^{commit}
-export branch_merge
-
-git rev-parse --verify $branch_merge >/dev/null 2>&1 || {
-	skip_all='skipping because $branch_merge was not found'
-	test_done
-}
-
-write_script swap-first-two.sh <<\EOF
-case "$1" in
-*/COMMIT_EDITMSG)
-	mv "$1" "$1".bak &&
-	sed -e '1{h;d}' -e 2G <"$1".bak >"$1"
-	;;
-esac
-EOF
-
-test_expect_success 'setup' '
-	git config core.editor "\"$PWD"/swap-first-two.sh\" &&
-	git checkout -f $branch_merge^2
-'
-
-test_perf 'rebase -i' '
-	git rebase -i $branch_merge^
-'
-
-test_done
diff --git a/third_party/git/t/perf/p4000-diff-algorithms.sh b/third_party/git/t/perf/p4000-diff-algorithms.sh
deleted file mode 100755
index 7e00c9da47d7..000000000000
--- a/third_party/git/t/perf/p4000-diff-algorithms.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-test_description="Tests diff generation performance"
-
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_perf 'log -3000 (baseline)' '
-	git log -3000 >/dev/null
-'
-
-test_perf 'log --raw -3000 (tree-only)' '
-	git log --raw -3000 >/dev/null
-'
-
-test_perf 'log -p -3000 (Myers)' '
-	git log -p -3000 >/dev/null
-'
-
-test_perf 'log -p -3000 --histogram' '
-	git log -p -3000 --histogram >/dev/null
-'
-
-test_perf 'log -p -3000 --patience' '
-	git log -p -3000 --patience >/dev/null
-'
-
-test_done
diff --git a/third_party/git/t/perf/p4001-diff-no-index.sh b/third_party/git/t/perf/p4001-diff-no-index.sh
deleted file mode 100755
index 683be6984f5a..000000000000
--- a/third_party/git/t/perf/p4001-diff-no-index.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-test_description="Test diff --no-index performance"
-
-. ./perf-lib.sh
-
-test_perf_large_repo
-test_checkout_worktree
-
-file1=$(git ls-files | tail -n 2 | head -1)
-file2=$(git ls-files | tail -n 1 | head -1)
-
-test_expect_success "empty files, so they take no time to diff" "
-	echo >$file1 &&
-	echo >$file2
-"
-
-test_perf "diff --no-index" "
-	git diff --no-index $file1 $file2 >/dev/null
-"
-
-test_done
diff --git a/third_party/git/t/perf/p4205-log-pretty-formats.sh b/third_party/git/t/perf/p4205-log-pretty-formats.sh
deleted file mode 100755
index 7c26f4f33788..000000000000
--- a/third_party/git/t/perf/p4205-log-pretty-formats.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-test_description='Tests the performance of various pretty format placeholders'
-
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-for format in %H %h %T %t %P %p %h-%h-%h
-do
-	test_perf "log with $format" "
-		git log --format=\"$format\" >/dev/null
-	"
-done
-
-test_done
diff --git a/third_party/git/t/perf/p4211-line-log.sh b/third_party/git/t/perf/p4211-line-log.sh
deleted file mode 100755
index 392bcc0e51f8..000000000000
--- a/third_party/git/t/perf/p4211-line-log.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/sh
-
-test_description='Tests log -L performance'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-# Pick a file to log pseudo-randomly.  The sort key is the blob hash,
-# so it is stable.
-test_expect_success 'select a file' '
-	git ls-tree HEAD | grep ^100644 |
-	sort -k 3 | head -1 | cut -f 2 >filelist
-'
-
-file=$(cat filelist)
-export file
-
-test_perf 'git rev-list --topo-order (baseline)' '
-	git rev-list --topo-order HEAD >/dev/null
-'
-
-test_perf 'git log --follow (baseline for -M)' '
-	git log --oneline --follow -- "$file" >/dev/null
-'
-
-test_perf 'git log -L (renames off)' '
-	git log --no-renames -L 1:"$file" >/dev/null
-'
-
-test_perf 'git log -L (renames on)' '
-	git log -M -L 1:"$file" >/dev/null
-'
-
-test_perf 'git log --oneline --raw --parents' '
-	git log --oneline --raw --parents >/dev/null
-'
-
-test_perf 'git log --oneline --raw --parents -1000' '
-	git log --oneline --raw --parents -1000 >/dev/null
-'
-
-test_done
diff --git a/third_party/git/t/perf/p4220-log-grep-engines.sh b/third_party/git/t/perf/p4220-log-grep-engines.sh
deleted file mode 100755
index 2bc47ded4d11..000000000000
--- a/third_party/git/t/perf/p4220-log-grep-engines.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-
-test_description="Comparison of git-log's --grep regex engines
-
-Set GIT_PERF_4220_LOG_OPTS in the environment to pass options to
-git-grep. Make sure to include a leading space,
-e.g. GIT_PERF_4220_LOG_OPTS=' -i'. Some options to try:
-
-	-i
-	--invert-grep
-	-i --invert-grep
-"
-
-. ./perf-lib.sh
-
-test_perf_large_repo
-test_checkout_worktree
-
-for pattern in \
-	'how.to' \
-	'^how to' \
-	'[how] to' \
-	'\(e.t[^ ]*\|v.ry\) rare' \
-	'm\(ú\|u\)lt.b\(æ\|y\)te'
-do
-	for engine in basic extended perl
-	do
-		if test $engine != "basic"
-		then
-			# Poor man's basic -> extended converter.
-			pattern=$(echo $pattern | sed 's/\\//g')
-		fi
-		if test $engine = "perl" && ! test_have_prereq PCRE
-		then
-			prereq="PCRE"
-		else
-			prereq=""
-		fi
-		test_perf $prereq "$engine log$GIT_PERF_4220_LOG_OPTS --grep='$pattern'" "
-			git -c grep.patternType=$engine log --pretty=format:%h$GIT_PERF_4220_LOG_OPTS --grep='$pattern' >'out.$engine' || :
-		"
-	done
-
-	test_expect_success "assert that all engines found the same for$GIT_PERF_4220_LOG_OPTS '$pattern'" '
-		test_cmp out.basic out.extended &&
-		if test_have_prereq PCRE
-		then
-			test_cmp out.basic out.perl
-		fi
-	'
-done
-
-test_done
diff --git a/third_party/git/t/perf/p4221-log-grep-engines-fixed.sh b/third_party/git/t/perf/p4221-log-grep-engines-fixed.sh
deleted file mode 100755
index 060971265a9c..000000000000
--- a/third_party/git/t/perf/p4221-log-grep-engines-fixed.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-
-test_description="Comparison of git-log's --grep regex engines with -F
-
-Set GIT_PERF_4221_LOG_OPTS in the environment to pass options to
-git-grep. Make sure to include a leading space,
-e.g. GIT_PERF_4221_LOG_OPTS=' -i'. Some options to try:
-
-	-i
-	--invert-grep
-	-i --invert-grep
-"
-
-. ./perf-lib.sh
-
-test_perf_large_repo
-test_checkout_worktree
-
-for pattern in 'int' 'uncommon' 'æ'
-do
-	for engine in fixed basic extended perl
-	do
-		if test $engine = "perl" && ! test_have_prereq PCRE
-		then
-			prereq="PCRE"
-		else
-			prereq=""
-		fi
-		test_perf $prereq "$engine log$GIT_PERF_4221_LOG_OPTS --grep='$pattern'" "
-			git -c grep.patternType=$engine log --pretty=format:%h$GIT_PERF_4221_LOG_OPTS --grep='$pattern' >'out.$engine' || :
-		"
-	done
-
-	test_expect_success "assert that all engines found the same for$GIT_PERF_4221_LOG_OPTS '$pattern'" '
-		test_cmp out.fixed out.basic &&
-		test_cmp out.fixed out.extended &&
-		if test_have_prereq PCRE
-		then
-			test_cmp out.fixed out.perl
-		fi
-	'
-done
-
-test_done
diff --git a/third_party/git/t/perf/p5302-pack-index.sh b/third_party/git/t/perf/p5302-pack-index.sh
deleted file mode 100755
index 228593d9ad6b..000000000000
--- a/third_party/git/t/perf/p5302-pack-index.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/sh
-
-test_description="Tests index-pack performance"
-
-. ./perf-lib.sh
-
-test_perf_large_repo
-
-test_expect_success 'repack' '
-	git repack -ad &&
-	PACK=$(ls .git/objects/pack/*.pack | head -n1) &&
-	test -f "$PACK" &&
-	export PACK
-'
-
-# Rather than counting up and doubling each time, count down from the endpoint,
-# halving each time. That ensures that our final test uses as many threads as
-# CPUs, even if it isn't a power of 2.
-test_expect_success 'set up thread-counting tests' '
-	t=$(test-tool online-cpus) &&
-	threads= &&
-	while test $t -gt 0
-	do
-		threads="$t $threads"
-		t=$((t / 2))
-	done
-'
-
-test_perf PERF_EXTRA 'index-pack 0 threads' '
-	rm -rf repo.git &&
-	git init --bare repo.git &&
-	GIT_DIR=repo.git git index-pack --threads=1 --stdin < $PACK
-'
-
-for t in $threads
-do
-	THREADS=$t
-	export THREADS
-	test_perf PERF_EXTRA "index-pack $t threads" '
-		rm -rf repo.git &&
-		git init --bare repo.git &&
-		GIT_DIR=repo.git GIT_FORCE_THREADS=1 \
-		git index-pack --threads=$THREADS --stdin <$PACK
-	'
-done
-
-test_perf 'index-pack default number of threads' '
-	rm -rf repo.git &&
-	git init --bare repo.git &&
-	GIT_DIR=repo.git git index-pack --stdin < $PACK
-'
-
-test_done
diff --git a/third_party/git/t/perf/p5303-many-packs.sh b/third_party/git/t/perf/p5303-many-packs.sh
deleted file mode 100755
index f4c2ab058470..000000000000
--- a/third_party/git/t/perf/p5303-many-packs.sh
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/bin/sh
-
-test_description='performance with large numbers of packs'
-. ./perf-lib.sh
-
-test_perf_large_repo
-
-# A real many-pack situation would probably come from having a lot of pushes
-# over time. We don't know how big each push would be, but we can fake it by
-# just walking the first-parent chain and having every 5 commits be their own
-# "push". This isn't _entirely_ accurate, as real pushes would have some
-# duplicate objects due to thin-pack fixing, but it's a reasonable
-# approximation.
-#
-# And then all of the rest of the objects can go in a single packfile that
-# represents the state before any of those pushes (actually, we'll generate
-# that first because in such a setup it would be the oldest pack, and we sort
-# the packs by reverse mtime inside git).
-repack_into_n () {
-	rm -rf staging &&
-	mkdir staging &&
-
-	git rev-list --first-parent HEAD |
-	sed -n '1~5p' |
-	head -n "$1" |
-	perl -e 'print reverse <>' \
-	>pushes
-
-	# create base packfile
-	head -n 1 pushes |
-	git pack-objects --delta-base-offset --revs staging/pack
-
-	# and then incrementals between each pair of commits
-	last= &&
-	while read rev
-	do
-		if test -n "$last"; then
-			{
-				echo "$rev" &&
-				echo "^$last"
-			} |
-			git pack-objects --delta-base-offset --revs \
-				staging/pack || return 1
-		fi
-		last=$rev
-	done <pushes &&
-
-	# and install the whole thing
-	rm -f .git/objects/pack/* &&
-	mv staging/* .git/objects/pack/
-}
-
-# Pretend we just have a single branch and no reflogs, and that everything is
-# in objects/pack; that makes our fake pack-building via repack_into_n()
-# much simpler.
-test_expect_success 'simplify reachability' '
-	tip=$(git rev-parse --verify HEAD) &&
-	git for-each-ref --format="option no-deref%0adelete %(refname)" |
-	git update-ref --stdin &&
-	rm -rf .git/logs &&
-	git update-ref refs/heads/master $tip &&
-	git symbolic-ref HEAD refs/heads/master &&
-	git repack -ad
-'
-
-for nr_packs in 1 50 1000
-do
-	test_expect_success "create $nr_packs-pack scenario" '
-		repack_into_n $nr_packs
-	'
-
-	test_perf "rev-list ($nr_packs)" '
-		git rev-list --objects --all >/dev/null
-	'
-
-	test_perf "abbrev-commit ($nr_packs)" '
-		git rev-list --abbrev-commit HEAD >/dev/null
-	'
-
-	# This simulates the interesting part of the repack, which is the
-	# actual pack generation, without smudging the on-disk setup
-	# between trials.
-	test_perf "repack ($nr_packs)" '
-		GIT_TEST_FULL_IN_PACK_ARRAY=1 \
-		git pack-objects --keep-true-parents \
-		  --honor-pack-keep --non-empty --all \
-		  --reflog --indexed-objects --delta-base-offset \
-		  --stdout </dev/null >/dev/null
-	'
-done
-
-# Measure pack loading with 10,000 packs.
-test_expect_success 'generate lots of packs' '
-	for i in $(test_seq 10000); do
-		echo "blob"
-		echo "data <<EOF"
-		echo "blob $i"
-		echo "EOF"
-		echo "checkpoint"
-	done |
-	git -c fastimport.unpackLimit=0 fast-import
-'
-
-# The purpose of this test is to evaluate load time for a large number
-# of packs while doing as little other work as possible.
-test_perf "load 10,000 packs" '
-	git rev-parse --verify "HEAD^{commit}"
-'
-
-test_done
diff --git a/third_party/git/t/perf/p5304-prune.sh b/third_party/git/t/perf/p5304-prune.sh
deleted file mode 100755
index 83baedb8a492..000000000000
--- a/third_party/git/t/perf/p5304-prune.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh
-
-test_description='performance tests of prune'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_expect_success 'remove reachable loose objects' '
-	git repack -ad
-'
-
-test_expect_success 'remove unreachable loose objects' '
-	git prune
-'
-
-test_expect_success 'confirm there are no loose objects' '
-	git count-objects | grep ^0
-'
-
-test_perf 'prune with no objects' '
-	git prune
-'
-
-test_expect_success 'repack with bitmaps' '
-	git repack -adb
-'
-
-# We have to create the object in each trial run, since otherwise
-# runs after the first see no object and just skip the traversal entirely!
-test_perf 'prune with bitmaps' '
-	echo "probably not present in repo" | git hash-object -w --stdin &&
-	git prune
-'
-
-test_done
diff --git a/third_party/git/t/perf/p5310-pack-bitmaps.sh b/third_party/git/t/perf/p5310-pack-bitmaps.sh
deleted file mode 100755
index b3e725f0310a..000000000000
--- a/third_party/git/t/perf/p5310-pack-bitmaps.sh
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/sh
-
-test_description='Tests pack performance using bitmaps'
-. ./perf-lib.sh
-
-test_perf_large_repo
-
-# note that we do everything through config,
-# since we want to be able to compare bitmap-aware
-# git versus non-bitmap git
-#
-# We intentionally use the deprecated pack.writebitmaps
-# config so that we can test against older versions of git.
-test_expect_success 'setup bitmap config' '
-	git config pack.writebitmaps true
-'
-
-test_perf 'repack to disk' '
-	git repack -ad
-'
-
-test_perf 'simulated clone' '
-	git pack-objects --stdout --all </dev/null >/dev/null
-'
-
-test_perf 'simulated fetch' '
-	have=$(git rev-list HEAD~100 -1) &&
-	{
-		echo HEAD &&
-		echo ^$have
-	} | git pack-objects --revs --stdout >/dev/null
-'
-
-test_perf 'pack to file (bitmap)' '
-	git pack-objects --use-bitmap-index --all pack1b </dev/null >/dev/null
-'
-
-test_perf 'rev-list (commits)' '
-	git rev-list --all --use-bitmap-index >/dev/null
-'
-
-test_perf 'rev-list (objects)' '
-	git rev-list --all --use-bitmap-index --objects >/dev/null
-'
-
-test_perf 'rev-list count with blob:none' '
-	git rev-list --use-bitmap-index --count --objects --all \
-		--filter=blob:none >/dev/null
-'
-
-test_perf 'rev-list count with blob:limit=1k' '
-	git rev-list --use-bitmap-index --count --objects --all \
-		--filter=blob:limit=1k >/dev/null
-'
-
-test_perf 'rev-list count with tree:0' '
-	git rev-list --use-bitmap-index --count --objects --all \
-		--filter=tree:0 >/dev/null
-'
-
-test_perf 'simulated partial clone' '
-	git pack-objects --stdout --all --filter=blob:none </dev/null >/dev/null
-'
-
-test_expect_success 'create partial bitmap state' '
-	# pick a commit to represent the repo tip in the past
-	cutoff=$(git rev-list HEAD~100 -1) &&
-	orig_tip=$(git rev-parse HEAD) &&
-
-	# now kill off all of the refs and pretend we had
-	# just the one tip
-	rm -rf .git/logs .git/refs/* .git/packed-refs &&
-	git update-ref HEAD $cutoff &&
-
-	# and then repack, which will leave us with a nice
-	# big bitmap pack of the "old" history, and all of
-	# the new history will be loose, as if it had been pushed
-	# up incrementally and exploded via unpack-objects
-	git repack -Ad &&
-
-	# and now restore our original tip, as if the pushes
-	# had happened
-	git update-ref HEAD $orig_tip
-'
-
-test_perf 'clone (partial bitmap)' '
-	git pack-objects --stdout --all </dev/null >/dev/null
-'
-
-test_perf 'pack to file (partial bitmap)' '
-	git pack-objects --use-bitmap-index --all pack2b </dev/null >/dev/null
-'
-
-test_perf 'rev-list with tree filter (partial bitmap)' '
-	git rev-list --use-bitmap-index --count --objects --all \
-		--filter=tree:0 >/dev/null
-'
-
-test_done
diff --git a/third_party/git/t/perf/p5311-pack-bitmaps-fetch.sh b/third_party/git/t/perf/p5311-pack-bitmaps-fetch.sh
deleted file mode 100755
index 47c3fd7581cc..000000000000
--- a/third_party/git/t/perf/p5311-pack-bitmaps-fetch.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-
-test_description='performance of fetches from bitmapped packs'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_expect_success 'create bitmapped server repo' '
-	git config pack.writebitmaps true &&
-	git repack -ad
-'
-
-# simulate a fetch from a repository that last fetched N days ago, for
-# various values of N. We do so by following the first-parent chain,
-# and assume the first entry in the chain that is N days older than the current
-# HEAD is where the HEAD would have been then.
-for days in 1 2 4 8 16 32 64 128; do
-	title=$(printf '%10s' "($days days)")
-	test_expect_success "setup revs from $days days ago" '
-		now=$(git log -1 --format=%ct HEAD) &&
-		then=$(($now - ($days * 86400))) &&
-		tip=$(git rev-list -1 --first-parent --until=$then HEAD) &&
-		{
-			echo HEAD &&
-			echo ^$tip
-		} >revs
-	'
-
-	test_perf "server $title" '
-		git pack-objects --stdout --revs \
-				 --thin --delta-base-offset \
-				 <revs >tmp.pack
-	'
-
-	test_size "size   $title" '
-		wc -c <tmp.pack
-	'
-
-	test_perf "client $title" '
-		git index-pack --stdin --fix-thin <tmp.pack
-	'
-done
-
-test_done
diff --git a/third_party/git/t/perf/p5550-fetch-tags.sh b/third_party/git/t/perf/p5550-fetch-tags.sh
deleted file mode 100755
index d0e0e019ea36..000000000000
--- a/third_party/git/t/perf/p5550-fetch-tags.sh
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/bin/sh
-
-test_description='performance of tag-following with many tags
-
-This tests a fairly pathological case, so rather than rely on a real-world
-case, we will construct our own repository. The situation is roughly as
-follows.
-
-The parent repository has a large number of tags which are disconnected from
-the rest of history. That makes them candidates for tag-following, but we never
-actually grab them (and thus they will impact each subsequent fetch).
-
-The child repository is a clone of parent, without the tags, and is at least
-one commit behind the parent (meaning that we will fetch one object and then
-examine the tags to see if they need followed). Furthermore, it has a large
-number of packs.
-
-The exact values of "large" here are somewhat arbitrary; I picked values that
-start to show a noticeable performance problem on my machine, but without
-taking too long to set up and run the tests.
-'
-. ./perf-lib.sh
-. "$TEST_DIRECTORY/perf/lib-pack.sh"
-
-# make a long nonsense history on branch $1, consisting of $2 commits, each
-# with a unique file pointing to the blob at $2.
-create_history () {
-	perl -le '
-		my ($branch, $n, $blob) = @ARGV;
-		for (1..$n) {
-			print "commit refs/heads/$branch";
-			print "committer nobody <nobody@example.com> now";
-			print "data 4";
-			print "foo";
-			print "M 100644 $blob $_";
-		}
-	' "$@" |
-	git fast-import --date-format=now
-}
-
-# make a series of tags, one per commit in the revision range given by $@
-create_tags () {
-	git rev-list "$@" |
-	perl -lne 'print "create refs/tags/$. $_"' |
-	git update-ref --stdin
-}
-
-test_expect_success 'create parent and child' '
-	git init parent &&
-	git -C parent commit --allow-empty -m base &&
-	git clone parent child &&
-	git -C parent commit --allow-empty -m trigger-fetch
-'
-
-test_expect_success 'populate parent tags' '
-	(
-		cd parent &&
-		blob=$(echo content | git hash-object -w --stdin) &&
-		create_history cruft 3000 $blob &&
-		create_tags cruft &&
-		git branch -D cruft
-	)
-'
-
-test_expect_success 'create child packs' '
-	(
-		cd child &&
-		setup_many_packs
-	)
-'
-
-test_perf 'fetch' '
-	# make sure there is something to fetch on each iteration
-	git -C child update-ref -d refs/remotes/origin/master &&
-	git -C child fetch
-'
-
-test_done
diff --git a/third_party/git/t/perf/p5551-fetch-rescan.sh b/third_party/git/t/perf/p5551-fetch-rescan.sh
deleted file mode 100755
index b99dc23e328d..000000000000
--- a/third_party/git/t/perf/p5551-fetch-rescan.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-
-test_description='fetch performance with many packs
-
-It is common for fetch to consider objects that we might not have, and it is an
-easy mistake for the code to use a function like `parse_object` that might
-give the correct _answer_ on such an object, but do so slowly (due to
-re-scanning the pack directory for lookup failures).
-
-The resulting performance drop can be hard to notice in a real repository, but
-becomes quite large in a repository with a large number of packs. So this
-test creates a more pathological case, since any mistakes would produce a more
-noticeable slowdown.
-'
-. ./perf-lib.sh
-. "$TEST_DIRECTORY"/perf/lib-pack.sh
-
-test_expect_success 'create parent and child' '
-	git init parent &&
-	git clone parent child
-'
-
-
-test_expect_success 'create refs in the parent' '
-	(
-		cd parent &&
-		git commit --allow-empty -m foo &&
-		head=$(git rev-parse HEAD) &&
-		test_seq 1000 |
-		sed "s,.*,update refs/heads/& $head," |
-		$MODERN_GIT update-ref --stdin
-	)
-'
-
-test_expect_success 'create many packs in the child' '
-	(
-		cd child &&
-		setup_many_packs
-	)
-'
-
-test_perf 'fetch' '
-	# start at the same state for each iteration
-	obj=$($MODERN_GIT -C parent rev-parse HEAD) &&
-	(
-		cd child &&
-		$MODERN_GIT for-each-ref --format="delete %(refname)" refs/remotes |
-		$MODERN_GIT update-ref --stdin &&
-		rm -vf .git/objects/$(echo $obj | sed "s|^..|&/|") &&
-
-		git fetch
-	)
-'
-
-test_done
diff --git a/third_party/git/t/perf/p5600-partial-clone.sh b/third_party/git/t/perf/p5600-partial-clone.sh
deleted file mode 100755
index 3e04bd2ae1d6..000000000000
--- a/third_party/git/t/perf/p5600-partial-clone.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-test_description='performance of partial clones'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_expect_success 'enable server-side config' '
-	git config uploadpack.allowFilter true &&
-	git config uploadpack.allowAnySHA1InWant true
-'
-
-test_perf 'clone without blobs' '
-	rm -rf bare.git &&
-	git clone --no-local --bare --filter=blob:none . bare.git
-'
-
-test_perf 'checkout of result' '
-	rm -rf worktree &&
-	mkdir -p worktree/.git &&
-	tar -C bare.git -cf - . | tar -C worktree/.git -xf - &&
-	git -C worktree config core.bare false &&
-	git -C worktree checkout -f
-'
-
-test_done
diff --git a/third_party/git/t/perf/p5601-clone-reference.sh b/third_party/git/t/perf/p5601-clone-reference.sh
deleted file mode 100755
index 68fed663479d..000000000000
--- a/third_party/git/t/perf/p5601-clone-reference.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/sh
-
-test_description='speed of clone --reference'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-test_expect_success 'create shareable repository' '
-	git clone --bare . shared.git
-'
-
-test_expect_success 'advance base repository' '
-	# Do not use test_commit here; its test_tick will
-	# use some ancient hard-coded date. The resulting clock
-	# skew will cause pack-objects to traverse in a very
-	# sub-optimal order, skewing the results.
-	echo content >new-file-that-does-not-exist &&
-	git add new-file-that-does-not-exist &&
-	git commit -m "new commit"
-'
-
-test_perf 'clone --reference' '
-	rm -rf dst.git &&
-	git clone --no-local --bare --reference shared.git . dst.git
-'
-
-test_done
diff --git a/third_party/git/t/perf/p7000-filter-branch.sh b/third_party/git/t/perf/p7000-filter-branch.sh
deleted file mode 100755
index b029586ccb2c..000000000000
--- a/third_party/git/t/perf/p7000-filter-branch.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-test_description='performance of filter-branch'
-. ./perf-lib.sh
-
-test_perf_default_repo
-test_checkout_worktree
-
-test_expect_success 'mark bases for tests' '
-	git tag -f tip &&
-	git tag -f base HEAD~100
-'
-
-test_perf 'noop filter' '
-	git checkout --detach tip &&
-	git filter-branch -f base..HEAD
-'
-
-test_perf 'noop prune-empty' '
-	git checkout --detach tip &&
-	git filter-branch -f --prune-empty base..HEAD
-'
-
-test_done
diff --git a/third_party/git/t/perf/p7300-clean.sh b/third_party/git/t/perf/p7300-clean.sh
deleted file mode 100755
index 7c1888a27e7f..000000000000
--- a/third_party/git/t/perf/p7300-clean.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh
-
-test_description="Test git-clean performance"
-
-. ./perf-lib.sh
-
-test_perf_default_repo
-test_checkout_worktree
-
-test_expect_success 'setup untracked directory with many sub dirs' '
-	rm -rf 500_sub_dirs 100000_sub_dirs clean_test_dir &&
-	mkdir 500_sub_dirs 100000_sub_dirs clean_test_dir &&
-	for i in $(test_seq 1 500)
-	do
-		mkdir 500_sub_dirs/dir$i || return $?
-	done &&
-	for i in $(test_seq 1 200)
-	do
-		cp -r 500_sub_dirs 100000_sub_dirs/dir$i || return $?
-	done
-'
-
-test_perf 'clean many untracked sub dirs, check for nested git' '
-	git clean -n -q -f -d 100000_sub_dirs/
-'
-
-test_perf 'clean many untracked sub dirs, ignore nested git' '
-	git clean -n -q -f -f -d 100000_sub_dirs/
-'
-
-test_perf 'ls-files -o' '
-	git ls-files -o
-'
-
-test_done
diff --git a/third_party/git/t/perf/p7519-fsmonitor.sh b/third_party/git/t/perf/p7519-fsmonitor.sh
deleted file mode 100755
index def7ecdbc786..000000000000
--- a/third_party/git/t/perf/p7519-fsmonitor.sh
+++ /dev/null
@@ -1,183 +0,0 @@
-#!/bin/sh
-
-test_description="Test core.fsmonitor"
-
-. ./perf-lib.sh
-
-#
-# Performance test for the fsmonitor feature which enables git to talk to a
-# file system change monitor and avoid having to scan the working directory
-# for new or modified files.
-#
-# By default, the performance test will utilize the Watchman file system
-# monitor if it is installed.  If Watchman is not installed, it will use a
-# dummy integration script that does not report any new or modified files.
-# The dummy script has very little overhead which provides optimistic results.
-#
-# The performance test will also use the untracked cache feature if it is
-# available as fsmonitor uses it to speed up scanning for untracked files.
-#
-# There are 3 environment variables that can be used to alter the default
-# behavior of the performance test:
-#
-# GIT_PERF_7519_UNTRACKED_CACHE: used to configure core.untrackedCache
-# GIT_PERF_7519_SPLIT_INDEX: used to configure core.splitIndex
-# GIT_PERF_7519_FSMONITOR: used to configure core.fsMonitor
-#
-# The big win for using fsmonitor is the elimination of the need to scan the
-# working directory looking for changed and untracked files. If the file
-# information is all cached in RAM, the benefits are reduced.
-#
-# GIT_PERF_7519_DROP_CACHE: if set, the OS caches are dropped between tests
-#
-
-test_perf_large_repo
-test_checkout_worktree
-
-test_lazy_prereq UNTRACKED_CACHE '
-	{ git update-index --test-untracked-cache; ret=$?; } &&
-	test $ret -ne 1
-'
-
-test_lazy_prereq WATCHMAN '
-	command -v watchman
-'
-
-if test_have_prereq WATCHMAN
-then
-	# Convert unix style paths to escaped Windows style paths for Watchman
-	case "$(uname -s)" in
-	MSYS_NT*)
-	  GIT_WORK_TREE="$(cygpath -aw "$PWD" | sed 's,\\,/,g')"
-	  ;;
-	*)
-	  GIT_WORK_TREE="$PWD"
-	  ;;
-	esac
-fi
-
-if test -n "$GIT_PERF_7519_DROP_CACHE"
-then
-	# When using GIT_PERF_7519_DROP_CACHE, GIT_PERF_REPEAT_COUNT must be 1 to
-	# generate valid results. Otherwise the caching that happens for the nth
-	# run will negate the validity of the comparisons.
-	if test "$GIT_PERF_REPEAT_COUNT" -ne 1
-	then
-		echo "warning: Setting GIT_PERF_REPEAT_COUNT=1" >&2
-		GIT_PERF_REPEAT_COUNT=1
-	fi
-fi
-
-test_expect_success "setup for fsmonitor" '
-	# set untrackedCache depending on the environment
-	if test -n "$GIT_PERF_7519_UNTRACKED_CACHE"
-	then
-		git config core.untrackedCache "$GIT_PERF_7519_UNTRACKED_CACHE"
-	else
-		if test_have_prereq UNTRACKED_CACHE
-		then
-			git config core.untrackedCache true
-		else
-			git config core.untrackedCache false
-		fi
-	fi &&
-
-	# set core.splitindex depending on the environment
-	if test -n "$GIT_PERF_7519_SPLIT_INDEX"
-	then
-		git config core.splitIndex "$GIT_PERF_7519_SPLIT_INDEX"
-	fi &&
-
-	# set INTEGRATION_SCRIPT depending on the environment
-	if test -n "$GIT_PERF_7519_FSMONITOR"
-	then
-		INTEGRATION_SCRIPT="$GIT_PERF_7519_FSMONITOR"
-	else
-		#
-		# Choose integration script based on existence of Watchman.
-		# If Watchman exists, watch the work tree and attempt a query.
-		# If everything succeeds, use Watchman integration script,
-		# else fall back to an empty integration script.
-		#
-		mkdir .git/hooks &&
-		if test_have_prereq WATCHMAN
-		then
-			INTEGRATION_SCRIPT=".git/hooks/fsmonitor-watchman" &&
-			cp "$TEST_DIRECTORY/../templates/hooks--fsmonitor-watchman.sample" "$INTEGRATION_SCRIPT" &&
-			watchman watch "$GIT_WORK_TREE" &&
-			watchman watch-list | grep -q -F "$GIT_WORK_TREE"
-		else
-			INTEGRATION_SCRIPT=".git/hooks/fsmonitor-empty" &&
-			write_script "$INTEGRATION_SCRIPT"<<-\EOF
-			EOF
-		fi
-	fi &&
-
-	git config core.fsmonitor "$INTEGRATION_SCRIPT" &&
-	git update-index --fsmonitor
-'
-
-if test -n "$GIT_PERF_7519_DROP_CACHE"; then
-	test-tool drop-caches
-fi
-
-test_perf "status (fsmonitor=$INTEGRATION_SCRIPT)" '
-	git status
-'
-
-if test -n "$GIT_PERF_7519_DROP_CACHE"; then
-	test-tool drop-caches
-fi
-
-test_perf "status -uno (fsmonitor=$INTEGRATION_SCRIPT)" '
-	git status -uno
-'
-
-if test -n "$GIT_PERF_7519_DROP_CACHE"; then
-	test-tool drop-caches
-fi
-
-test_perf "status -uall (fsmonitor=$INTEGRATION_SCRIPT)" '
-	git status -uall
-'
-
-test_expect_success "setup without fsmonitor" '
-	unset INTEGRATION_SCRIPT &&
-	git config --unset core.fsmonitor &&
-	git update-index --no-fsmonitor
-'
-
-if test -n "$GIT_PERF_7519_DROP_CACHE"; then
-	test-tool drop-caches
-fi
-
-test_perf "status (fsmonitor=$INTEGRATION_SCRIPT)" '
-	git status
-'
-
-if test -n "$GIT_PERF_7519_DROP_CACHE"; then
-	test-tool drop-caches
-fi
-
-test_perf "status -uno (fsmonitor=$INTEGRATION_SCRIPT)" '
-	git status -uno
-'
-
-if test -n "$GIT_PERF_7519_DROP_CACHE"; then
-	test-tool drop-caches
-fi
-
-test_perf "status -uall (fsmonitor=$INTEGRATION_SCRIPT)" '
-	git status -uall
-'
-
-if test_have_prereq WATCHMAN
-then
-	watchman watch-del "$GIT_WORK_TREE" >/dev/null 2>&1 &&
-
-	# Work around Watchman bug on Windows where it holds on to handles
-	# preventing the removal of the trash directory
-	watchman shutdown-server >/dev/null 2>&1
-fi
-
-test_done
diff --git a/third_party/git/t/perf/p7810-grep.sh b/third_party/git/t/perf/p7810-grep.sh
deleted file mode 100755
index 9f4ade639f74..000000000000
--- a/third_party/git/t/perf/p7810-grep.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-test_description="git-grep performance in various modes"
-
-. ./perf-lib.sh
-
-test_perf_large_repo
-test_checkout_worktree
-
-test_perf 'grep worktree, cheap regex' '
-	git grep some_nonexistent_string || :
-'
-test_perf 'grep worktree, expensive regex' '
-	git grep "^.* *some_nonexistent_string$" || :
-'
-test_perf 'grep --cached, cheap regex' '
-	git grep --cached some_nonexistent_string || :
-'
-test_perf 'grep --cached, expensive regex' '
-	git grep --cached "^.* *some_nonexistent_string$" || :
-'
-
-test_done
diff --git a/third_party/git/t/perf/p7820-grep-engines.sh b/third_party/git/t/perf/p7820-grep-engines.sh
deleted file mode 100755
index 8b09c5bf328b..000000000000
--- a/third_party/git/t/perf/p7820-grep-engines.sh
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/bin/sh
-
-test_description="Comparison of git-grep's regex engines
-
-Set GIT_PERF_7820_GREP_OPTS in the environment to pass options to
-git-grep. Make sure to include a leading space,
-e.g. GIT_PERF_7820_GREP_OPTS=' -i'. Some options to try:
-
-	-i
-	-w
-	-v
-	-vi
-	-vw
-	-viw
-
-If GIT_PERF_GREP_THREADS is set to a list of threads (e.g. '1 4 8'
-etc.) we will test the patterns under those numbers of threads.
-"
-
-. ./perf-lib.sh
-
-test_perf_large_repo
-test_checkout_worktree
-
-if test -n "$GIT_PERF_GREP_THREADS"
-then
-	test_set_prereq PERF_GREP_ENGINES_THREADS
-fi
-
-for pattern in \
-	'how.to' \
-	'^how to' \
-	'[how] to' \
-	'\(e.t[^ ]*\|v.ry\) rare' \
-	'm\(ú\|u\)lt.b\(æ\|y\)te'
-do
-	for engine in basic extended perl
-	do
-		if test $engine != "basic"
-		then
-			# Poor man's basic -> extended converter.
-			pattern=$(echo "$pattern" | sed 's/\\//g')
-		fi
-		if test $engine = "perl" && ! test_have_prereq PCRE
-		then
-			prereq="PCRE"
-		else
-			prereq=""
-		fi
-		if ! test_have_prereq PERF_GREP_ENGINES_THREADS
-		then
-			test_perf $prereq "$engine grep$GIT_PERF_7820_GREP_OPTS '$pattern'" "
-				git -c grep.patternType=$engine grep$GIT_PERF_7820_GREP_OPTS -- '$pattern' >'out.$engine' || :
-			"
-		else
-			for threads in $GIT_PERF_GREP_THREADS
-			do
-				test_perf PTHREADS,$prereq "$engine grep$GIT_PERF_7820_GREP_OPTS '$pattern' with $threads threads" "
-					git -c grep.patternType=$engine -c grep.threads=$threads grep$GIT_PERF_7820_GREP_OPTS -- '$pattern' >'out.$engine.$threads' || :
-				"
-			done
-		fi
-	done
-
-	if ! test_have_prereq PERF_GREP_ENGINES_THREADS
-	then
-		test_expect_success "assert that all engines found the same for$GIT_PERF_7820_GREP_OPTS '$pattern'" '
-			test_cmp out.basic out.extended &&
-			if test_have_prereq PCRE
-			then
-				test_cmp out.basic out.perl
-			fi
-		'
-	else
-		for threads in $GIT_PERF_GREP_THREADS
-		do
-			test_expect_success PTHREADS "assert that all engines found the same for$GIT_PERF_7820_GREP_OPTS '$pattern' under threading" "
-				test_cmp out.basic.$threads out.extended.$threads &&
-				if test_have_prereq PCRE
-				then
-					test_cmp out.basic.$threads out.perl.$threads
-				fi
-			"
-		done
-	fi
-done
-
-test_done
diff --git a/third_party/git/t/perf/p7821-grep-engines-fixed.sh b/third_party/git/t/perf/p7821-grep-engines-fixed.sh
deleted file mode 100755
index 61e41b82cffa..000000000000
--- a/third_party/git/t/perf/p7821-grep-engines-fixed.sh
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/sh
-
-test_description="Comparison of git-grep's regex engines with -F
-
-Set GIT_PERF_7821_GREP_OPTS in the environment to pass options to
-git-grep. Make sure to include a leading space,
-e.g. GIT_PERF_7821_GREP_OPTS=' -w'. See p7820-grep-engines.sh for more
-options to try.
-
-If GIT_PERF_7821_THREADS is set to a list of threads (e.g. '1 4 8'
-etc.) we will test the patterns under those numbers of threads.
-"
-
-. ./perf-lib.sh
-
-test_perf_large_repo
-test_checkout_worktree
-
-if test -n "$GIT_PERF_GREP_THREADS"
-then
-	test_set_prereq PERF_GREP_ENGINES_THREADS
-fi
-
-for pattern in 'int' 'uncommon' 'æ'
-do
-	for engine in fixed basic extended perl
-	do
-		if test $engine = "perl" && ! test_have_prereq PCRE
-		then
-			prereq="PCRE"
-		else
-			prereq=""
-		fi
-		if ! test_have_prereq PERF_GREP_ENGINES_THREADS
-		then
-			test_perf $prereq "$engine grep$GIT_PERF_7821_GREP_OPTS $pattern" "
-				git -c grep.patternType=$engine grep$GIT_PERF_7821_GREP_OPTS $pattern >'out.$engine' || :
-			"
-		else
-			for threads in $GIT_PERF_GREP_THREADS
-			do
-				test_perf PTHREADS,$prereq "$engine grep$GIT_PERF_7821_GREP_OPTS $pattern with $threads threads" "
-					git -c grep.patternType=$engine -c grep.threads=$threads grep$GIT_PERF_7821_GREP_OPTS $pattern >'out.$engine.$threads' || :
-				"
-			done
-		fi
-	done
-
-	if ! test_have_prereq PERF_GREP_ENGINES_THREADS
-	then
-		test_expect_success "assert that all engines found the same for$GIT_PERF_7821_GREP_OPTS $pattern" '
-			test_cmp out.fixed out.basic &&
-			test_cmp out.fixed out.extended &&
-			if test_have_prereq PCRE
-			then
-				test_cmp out.fixed out.perl
-			fi
-		'
-	else
-		for threads in $GIT_PERF_GREP_THREADS
-		do
-			test_expect_success PTHREADS "assert that all engines found the same for$GIT_PERF_7821_GREP_OPTS $pattern under threading" "
-				test_cmp out.fixed.$threads out.basic.$threads &&
-				test_cmp out.fixed.$threads out.extended.$threads &&
-				if test_have_prereq PCRE
-				then
-					test_cmp out.fixed.$threads out.perl.$threads
-				fi
-			"
-		done
-	fi
-done
-
-test_done
diff --git a/third_party/git/t/perf/p9300-fast-import-export.sh b/third_party/git/t/perf/p9300-fast-import-export.sh
deleted file mode 100755
index 586161e9adcd..000000000000
--- a/third_party/git/t/perf/p9300-fast-import-export.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-test_description='test fast-import and fast-export performance'
-. ./perf-lib.sh
-
-test_perf_default_repo
-
-# Use --no-data here to produce a vastly smaller export file.
-# This is much cheaper to work with but should still exercise
-# fast-import pretty well (we'll still process all commits and
-# trees, which account for 60% or more of objects in most repos).
-#
-# Use --reencode to avoid the default of aborting on non-utf8 commits,
-# which lets this test run against a wider variety of sample repos.
-test_perf 'export (no-blobs)' '
-	git fast-export --reencode=yes --no-data HEAD >export
-'
-
-test_perf 'import (no-blobs)' '
-	git fast-import --force <export
-'
-
-test_done
diff --git a/third_party/git/t/perf/perf-lib.sh b/third_party/git/t/perf/perf-lib.sh
deleted file mode 100644
index 821581a88548..000000000000
--- a/third_party/git/t/perf/perf-lib.sh
+++ /dev/null
@@ -1,249 +0,0 @@
-# Performance testing framework.  Each perf script starts much like
-# a normal test script, except it sources this library instead of
-# test-lib.sh.  See t/perf/README for documentation.
-#
-# Copyright (c) 2011 Thomas Rast
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see http://www.gnu.org/licenses/ .
-
-# These variables must be set before the inclusion of test-lib.sh below,
-# because it will change our working directory.
-TEST_DIRECTORY=$(pwd)/..
-TEST_OUTPUT_DIRECTORY=$(pwd)
-
-TEST_NO_CREATE_REPO=t
-TEST_NO_MALLOC_CHECK=t
-
-. ../test-lib.sh
-
-if test -n "$GIT_TEST_INSTALLED" -a -z "$PERF_SET_GIT_TEST_INSTALLED"
-then
-	error "Do not use GIT_TEST_INSTALLED with the perf tests.
-
-Instead use:
-
-    ./run <path-to-git> -- <tests>
-
-See t/perf/README for details."
-fi
-
-# Variables from test-lib that are normally internal to the tests; we
-# need to export them for test_perf subshells
-export TEST_DIRECTORY TRASH_DIRECTORY GIT_BUILD_DIR GIT_TEST_CMP
-
-MODERN_GIT=$GIT_BUILD_DIR/bin-wrappers/git
-export MODERN_GIT
-
-perf_results_dir=$TEST_OUTPUT_DIRECTORY/test-results
-test -n "$GIT_PERF_SUBSECTION" && perf_results_dir="$perf_results_dir/$GIT_PERF_SUBSECTION"
-mkdir -p "$perf_results_dir"
-rm -f "$perf_results_dir"/$(basename "$0" .sh).subtests
-
-die_if_build_dir_not_repo () {
-	if ! ( cd "$TEST_DIRECTORY/.." &&
-		    git rev-parse --build-dir >/dev/null 2>&1 ); then
-		error "No $1 defined, and your build directory is not a repo"
-	fi
-}
-
-if test -z "$GIT_PERF_REPO"; then
-	die_if_build_dir_not_repo '$GIT_PERF_REPO'
-	GIT_PERF_REPO=$TEST_DIRECTORY/..
-fi
-if test -z "$GIT_PERF_LARGE_REPO"; then
-	die_if_build_dir_not_repo '$GIT_PERF_LARGE_REPO'
-	GIT_PERF_LARGE_REPO=$TEST_DIRECTORY/..
-fi
-
-test_perf_do_repo_symlink_config_ () {
-	test_have_prereq SYMLINKS || git config core.symlinks false
-}
-
-test_perf_create_repo_from () {
-	test "$#" = 2 ||
-	BUG "not 2 parameters to test-create-repo"
-	repo="$1"
-	source="$2"
-	source_git="$("$MODERN_GIT" -C "$source" rev-parse --git-dir)"
-	objects_dir="$("$MODERN_GIT" -C "$source" rev-parse --git-path objects)"
-	mkdir -p "$repo/.git"
-	(
-		cd "$source" &&
-		{ cp -Rl "$objects_dir" "$repo/.git/" 2>/dev/null ||
-			cp -R "$objects_dir" "$repo/.git/"; } &&
-		for stuff in "$source_git"/*; do
-			case "$stuff" in
-				*/objects|*/hooks|*/config|*/commondir)
-					;;
-				*)
-					cp -R "$stuff" "$repo/.git/" || exit 1
-					;;
-			esac
-		done
-	) &&
-	(
-		cd "$repo" &&
-		"$MODERN_GIT" init -q &&
-		test_perf_do_repo_symlink_config_ &&
-		mv .git/hooks .git/hooks-disabled 2>/dev/null &&
-		if test -f .git/index.lock
-		then
-			# We may be copying a repo that can't run "git
-			# status" due to a locked index. Since we have
-			# a copy it's fine to remove the lock.
-			rm .git/index.lock
-		fi
-	) || error "failed to copy repository '$source' to '$repo'"
-}
-
-# call at least one of these to establish an appropriately-sized repository
-test_perf_fresh_repo () {
-	repo="${1:-$TRASH_DIRECTORY}"
-	"$MODERN_GIT" init -q "$repo" &&
-	(
-		cd "$repo" &&
-		test_perf_do_repo_symlink_config_
-	)
-}
-
-test_perf_default_repo () {
-	test_perf_create_repo_from "${1:-$TRASH_DIRECTORY}" "$GIT_PERF_REPO"
-}
-test_perf_large_repo () {
-	if test "$GIT_PERF_LARGE_REPO" = "$GIT_BUILD_DIR"; then
-		echo "warning: \$GIT_PERF_LARGE_REPO is \$GIT_BUILD_DIR." >&2
-		echo "warning: This will work, but may not be a sufficiently large repo" >&2
-		echo "warning: for representative measurements." >&2
-	fi
-	test_perf_create_repo_from "${1:-$TRASH_DIRECTORY}" "$GIT_PERF_LARGE_REPO"
-}
-test_checkout_worktree () {
-	git checkout-index -u -a ||
-	error "git checkout-index failed"
-}
-
-# Performance tests should never fail.  If they do, stop immediately
-immediate=t
-
-# Perf tests require GNU time
-case "$(uname -s)" in Darwin) GTIME="${GTIME:-gtime}";; esac
-GTIME="${GTIME:-/usr/bin/time}"
-
-test_run_perf_ () {
-	test_cleanup=:
-	test_export_="test_cleanup"
-	export test_cleanup test_export_
-	"$GTIME" -f "%E %U %S" -o test_time.$i "$SHELL" -c '
-. '"$TEST_DIRECTORY"/test-lib-functions.sh'
-test_export () {
-	[ $# != 0 ] || return 0
-	test_export_="$test_export_\\|$1"
-	shift
-	test_export "$@"
-}
-'"$1"'
-ret=$?
-set | sed -n "s'"/'/'\\\\''/g"';s/^\\($test_export_\\)/export '"'&'"'/p" >test_vars
-exit $ret' >&3 2>&4
-	eval_ret=$?
-
-	if test $eval_ret = 0 || test -n "$expecting_failure"
-	then
-		test_eval_ "$test_cleanup"
-		. ./test_vars || error "failed to load updated environment"
-	fi
-	if test "$verbose" = "t" && test -n "$HARNESS_ACTIVE"; then
-		echo ""
-	fi
-	return "$eval_ret"
-}
-
-test_wrapper_ () {
-	test_wrapper_func_=$1; shift
-	test_start_
-	test "$#" = 3 && { test_prereq=$1; shift; } || test_prereq=
-	test "$#" = 2 ||
-	BUG "not 2 or 3 parameters to test-expect-success"
-	export test_prereq
-	if ! test_skip "$@"
-	then
-		base=$(basename "$0" .sh)
-		echo "$test_count" >>"$perf_results_dir"/$base.subtests
-		echo "$1" >"$perf_results_dir"/$base.$test_count.descr
-		base="$perf_results_dir"/"$PERF_RESULTS_PREFIX$(basename "$0" .sh)"."$test_count"
-		"$test_wrapper_func_" "$@"
-	fi
-
-	test_finish_
-}
-
-test_perf_ () {
-	if test -z "$verbose"; then
-		printf "%s" "perf $test_count - $1:"
-	else
-		echo "perf $test_count - $1:"
-	fi
-	for i in $(test_seq 1 $GIT_PERF_REPEAT_COUNT); do
-		say >&3 "running: $2"
-		if test_run_perf_ "$2"
-		then
-			if test -z "$verbose"; then
-				printf " %s" "$i"
-			else
-				echo "* timing run $i/$GIT_PERF_REPEAT_COUNT:"
-			fi
-		else
-			test -z "$verbose" && echo
-			test_failure_ "$@"
-			break
-		fi
-	done
-	if test -z "$verbose"; then
-		echo " ok"
-	else
-		test_ok_ "$1"
-	fi
-	"$TEST_DIRECTORY"/perf/min_time.perl test_time.* >"$base".result
-}
-
-test_perf () {
-	test_wrapper_ test_perf_ "$@"
-}
-
-test_size_ () {
-	say >&3 "running: $2"
-	if test_eval_ "$2" 3>"$base".result; then
-		test_ok_ "$1"
-	else
-		test_failure_ "$@"
-	fi
-}
-
-test_size () {
-	test_wrapper_ test_size_ "$@"
-}
-
-# We extend test_done to print timings at the end (./run disables this
-# and does it after running everything)
-test_at_end_hook_ () {
-	if test -z "$GIT_PERF_AGGREGATING_LATER"; then
-		( cd "$TEST_DIRECTORY"/perf && ./aggregate.perl $(basename "$0") )
-	fi
-}
-
-test_export () {
-	export "$@"
-}
-
-test_lazy_prereq PERF_EXTRA 'test_bool_env GIT_PERF_EXTRA false'
diff --git a/third_party/git/t/perf/repos/.gitignore b/third_party/git/t/perf/repos/.gitignore
deleted file mode 100644
index 72e3dc3e1947..000000000000
--- a/third_party/git/t/perf/repos/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-gen-*/
diff --git a/third_party/git/t/perf/repos/inflate-repo.sh b/third_party/git/t/perf/repos/inflate-repo.sh
deleted file mode 100755
index fcfc992b5b02..000000000000
--- a/third_party/git/t/perf/repos/inflate-repo.sh
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/sh
-# Inflate the size of an EXISTING repo.
-#
-# This script should be run inside the worktree of a TEST repo.
-# It will use the contents of the current HEAD to generate a
-# commit containing copies of the current worktree such that the
-# total size of the commit has at least <target_size> files.
-#
-# Usage: [-t target_size] [-b branch_name]
-
-set -e
-
-target_size=10000
-branch_name=p0006-ballast
-ballast=ballast
-
-while test "$#" -ne 0
-do
-    case "$1" in
-	-b)
-	    shift;
-	    test "$#" -ne 0 || { echo 'error: -b requires an argument' >&2; exit 1; }
-	    branch_name=$1;
-	    shift ;;
-	-t)
-	    shift;
-	    test "$#" -ne 0 || { echo 'error: -t requires an argument' >&2; exit 1; }
-	    target_size=$1;
-	    shift ;;
-	*)
-	    echo "error: unknown option '$1'" >&2; exit 1 ;;
-    esac
-done
-
-git ls-tree -r HEAD >GEN_src_list
-nr_src_files=$(cat GEN_src_list | wc -l)
-
-src_branch=$(git symbolic-ref --short HEAD)
-
-echo "Branch $src_branch initially has $nr_src_files files."
-
-if test $target_size -le $nr_src_files
-then
-    echo "Repository already exceeds target size $target_size."
-    rm GEN_src_list
-    exit 1
-fi
-
-# Create well-known branch and add 1 file change to start
-# if off before the ballast.
-git checkout -b $branch_name HEAD
-echo "$target_size" > inflate-repo.params
-git add inflate-repo.params
-git commit -q -m params
-
-# Create ballast for in our branch.
-copy=1
-nr_files=$nr_src_files
-while test $nr_files -lt $target_size
-do
-    sed -e "s|	|	$ballast/$copy/|" <GEN_src_list |
-	git update-index --index-info
-
-    nr_files=$(expr $nr_files + $nr_src_files)
-    copy=$(expr $copy + 1)
-done
-rm GEN_src_list
-git commit -q -m "ballast"
-
-# Modify 1 file and commit.
-echo "$target_size" >> inflate-repo.params
-git add inflate-repo.params
-git commit -q -m "ballast plus 1"
-
-nr_files=$(git ls-files | wc -l)
-
-# Checkout master to put repo in canonical state (because
-# the perf test may need to clone and enable sparse-checkout
-# before attempting to checkout a commit with the ballast
-# (because it may contain 100K directories and 1M files)).
-git checkout $src_branch
-
-echo "Repository inflated. Branch $branch_name has $nr_files files."
-
-exit 0
diff --git a/third_party/git/t/perf/repos/many-files.sh b/third_party/git/t/perf/repos/many-files.sh
deleted file mode 100755
index 28720e4e1041..000000000000
--- a/third_party/git/t/perf/repos/many-files.sh
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/bin/sh
-# Generate test data repository using the given parameters.
-# When omitted, we create "gen-many-files-d-w-f.git".
-#
-# Usage: [-r repo] [-d depth] [-w width] [-f files]
-#
-# -r repo: path to the new repo to be generated
-# -d depth: the depth of sub-directories
-# -w width: the number of sub-directories at each level
-# -f files: the number of files created in each directory
-#
-# Note that all files will have the same SHA-1 and each
-# directory at a level will have the same SHA-1, so we
-# will potentially have a large index, but not a large
-# ODB.
-#
-# Ballast will be created under "ballast/".
-
-EMPTY_BLOB=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
-
-set -e
-
-# (5, 10, 9) will create 999,999 ballast files.
-# (4, 10, 9) will create  99,999 ballast files.
-depth=5
-width=10
-files=9
-
-while test "$#" -ne 0
-do
-    case "$1" in
-	-r)
-	    shift;
-	    test "$#" -ne 0 || { echo 'error: -r requires an argument' >&2; exit 1; }
-	    repo=$1;
-	    shift ;;
-	-d)
-	    shift;
-	    test "$#" -ne 0 || { echo 'error: -d requires an argument' >&2; exit 1; }
-	    depth=$1;
-	    shift ;;
-	-w)
-	    shift;
-	    test "$#" -ne 0 || { echo 'error: -w requires an argument' >&2; exit 1; }
-	    width=$1;
-	    shift ;;
-	-f)
-	    shift;
-	    test "$#" -ne 0 || { echo 'error: -f requires an argument' >&2; exit 1; }
-	    files=$1;
-	    shift ;;
-	*)
-	    echo "error: unknown option '$1'" >&2; exit 1 ;;
-	esac
-done
-
-# Inflate the index with thousands of empty files.
-# usage: dir depth width files
-fill_index() {
-	awk -v arg_dir=$1 -v arg_depth=$2 -v arg_width=$3 -v arg_files=$4 '
-		function make_paths(dir, depth, width, files, f, w) {
-			for (f = 1; f <= files; f++) {
-				print dir "/file" f
-			}
-			if (depth > 0) {
-				for (w = 1; w <= width; w++) {
-					make_paths(dir "/dir" w, depth - 1, width, files)
-				}
-			}
-		}
-		END { make_paths(arg_dir, arg_depth, arg_width, arg_files) }
-		' </dev/null |
-	sed "s/^/100644 $EMPTY_BLOB	/" |
-	git update-index --index-info
-	return 0
-}
-
-[ -z "$repo" ] && repo=gen-many-files-$depth.$width.$files.git
-
-mkdir $repo
-cd $repo
-git init .
-
-# Create an initial commit just to define master.
-touch many-files.empty
-echo "$depth $width $files" >many-files.params
-git add many-files.*
-git commit -q -m params
-
-# Create ballast for p0006 based upon the given params and
-# inflate the index with thousands of empty files and commit.
-git checkout -b p0006-ballast
-fill_index "ballast" $depth $width $files
-git commit -q -m "ballast"
-
-nr_files=$(git ls-files | wc -l)
-
-# Modify 1 file and commit.
-echo "$depth $width $files" >>many-files.params
-git add many-files.params
-git commit -q -m "ballast plus 1"
-
-# Checkout master to put repo in canonical state (because
-# the perf test may need to clone and enable sparse-checkout
-# before attempting to checkout a commit with the ballast
-# (because it may contain 100K directories and 1M files)).
-git checkout master
-
-echo "Repository "$repo" ($depth, $width, $files) created.  Ballast $nr_files."
-exit 0
diff --git a/third_party/git/t/perf/run b/third_party/git/t/perf/run
deleted file mode 100755
index c7b86104e12a..000000000000
--- a/third_party/git/t/perf/run
+++ /dev/null
@@ -1,247 +0,0 @@
-#!/bin/sh
-
-die () {
-	echo >&2 "error: $*"
-	exit 1
-}
-
-while [ $# -gt 0 ]; do
-	arg="$1"
-	case "$arg" in
-	--)
-		break ;;
-	--help)
-		echo "usage: $0 [--config file] [--subsection subsec] [other_git_tree...] [--] [test_scripts]"
-		exit 0 ;;
-	--config)
-		shift
-		GIT_PERF_CONFIG_FILE=$(cd "$(dirname "$1")"; pwd)/$(basename "$1")
-		export GIT_PERF_CONFIG_FILE
-		shift ;;
-	--subsection)
-		shift
-		GIT_PERF_SUBSECTION="$1"
-		export GIT_PERF_SUBSECTION
-		shift ;;
-	--*)
-		die "unrecognised option: '$arg'" ;;
-	*)
-		break ;;
-	esac
-done
-
-run_one_dir () {
-	if test $# -eq 0; then
-		set -- p????-*.sh
-	fi
-	echo "=== Running $# tests in ${GIT_TEST_INSTALLED:-this tree} ==="
-	for t in "$@"; do
-		./$t $GIT_TEST_OPTS
-	done
-}
-
-unpack_git_rev () {
-	rev=$1
-	echo "=== Unpacking $rev in build/$rev ==="
-	mkdir -p build/$rev
-	(cd "$(git rev-parse --show-cdup)" && git archive --format=tar $rev) |
-	(cd build/$rev && tar x)
-}
-
-build_git_rev () {
-	rev=$1
-	name="$2"
-	for config in config.mak config.mak.autogen config.status
-	do
-		if test -e "../../$config"
-		then
-			cp "../../$config" "build/$rev/"
-		fi
-	done
-	echo "=== Building $rev ($name) ==="
-	(
-		cd build/$rev &&
-		if test -n "$GIT_PERF_MAKE_COMMAND"
-		then
-			sh -c "$GIT_PERF_MAKE_COMMAND"
-		else
-			make $GIT_PERF_MAKE_OPTS
-		fi
-	) || die "failed to build revision '$mydir'"
-}
-
-set_git_test_installed () {
-	mydir=$1
-
-	mydir_abs=$(cd $mydir && pwd)
-	mydir_abs_wrappers="$mydir_abs_wrappers/bin-wrappers"
-	if test -d "$mydir_abs_wrappers"
-	then
-		GIT_TEST_INSTALLED=$mydir_abs_wrappers
-	else
-		# Older versions of git lacked bin-wrappers;
-		# fallback to the files in the root.
-		GIT_TEST_INSTALLED=$mydir_abs
-	fi
-	export GIT_TEST_INSTALLED
-	PERF_SET_GIT_TEST_INSTALLED=true
-	export PERF_SET_GIT_TEST_INSTALLED
-}
-
-run_dirs_helper () {
-	mydir=${1%/}
-	shift
-	while test $# -gt 0 -a "$1" != -- -a ! -f "$1"; do
-		shift
-	done
-	if test $# -gt 0 -a "$1" = --; then
-		shift
-	fi
-
-	PERF_RESULTS_PREFIX=
-	if test "$mydir" = "."
-	then
-		unset GIT_TEST_INSTALLED
-	elif test -d "$mydir"
-	then
-		PERF_RESULTS_PREFIX=bindir$(cd $mydir && printf "%s" "$(pwd)" | tr -c "[a-zA-Z0-9]" "_").
-		set_git_test_installed "$mydir"
-	else
-		rev=$(git rev-parse --verify "$mydir" 2>/dev/null) ||
-		die "'$mydir' is neither a directory nor a valid revision"
-		if [ ! -d build/$rev ]; then
-			unpack_git_rev $rev
-		fi
-		build_git_rev $rev "$mydir"
-		mydir=build/$rev
-
-		PERF_RESULTS_PREFIX=build_$rev.
-		set_git_test_installed "$mydir"
-	fi
-	export PERF_RESULTS_PREFIX
-
-	run_one_dir "$@"
-}
-
-run_dirs () {
-	while test $# -gt 0 -a "$1" != -- -a ! -f "$1"; do
-		run_dirs_helper "$@"
-		shift
-	done
-}
-
-get_subsections () {
-	section="$1"
-	test -z "$GIT_PERF_CONFIG_FILE" && return
-	git config -f "$GIT_PERF_CONFIG_FILE" --name-only --get-regex "$section\..*\.[^.]+" |
-	sed -e "s/$section\.\(.*\)\..*/\1/" | sort | uniq
-}
-
-get_var_from_env_or_config () {
-	env_var="$1"
-	conf_sec="$2"
-	conf_var="$3"
-	conf_opts="$4" # optional
-
-	# Do nothing if the env variable is already set
-	eval "test -z \"\${$env_var+x}\"" || return
-
-	test -z "$GIT_PERF_CONFIG_FILE" && return
-
-	# Check if the variable is in the config file
-	if test -n "$GIT_PERF_SUBSECTION"
-	then
-		var="$conf_sec.$GIT_PERF_SUBSECTION.$conf_var"
-		conf_value=$(git config $conf_opts -f "$GIT_PERF_CONFIG_FILE" "$var") &&
-		eval "$env_var=\"$conf_value\"" && return
-	fi
-	var="$conf_sec.$conf_var"
-	conf_value=$(git config $conf_opts -f "$GIT_PERF_CONFIG_FILE" "$var") &&
-	eval "$env_var=\"$conf_value\""
-}
-
-run_subsection () {
-	get_var_from_env_or_config "GIT_PERF_REPEAT_COUNT" "perf" "repeatCount" "--int"
-	: ${GIT_PERF_REPEAT_COUNT:=3}
-	export GIT_PERF_REPEAT_COUNT
-
-	get_var_from_env_or_config "GIT_PERF_DIRS_OR_REVS" "perf" "dirsOrRevs"
-	set -- $GIT_PERF_DIRS_OR_REVS "$@"
-
-	get_var_from_env_or_config "GIT_PERF_MAKE_COMMAND" "perf" "makeCommand"
-	get_var_from_env_or_config "GIT_PERF_MAKE_OPTS" "perf" "makeOpts"
-
-	get_var_from_env_or_config "GIT_PERF_REPO_NAME" "perf" "repoName"
-	export GIT_PERF_REPO_NAME
-
-	GIT_PERF_AGGREGATING_LATER=t
-	export GIT_PERF_AGGREGATING_LATER
-
-	if test $# = 0 -o "$1" = -- -o -f "$1"; then
-		set -- . "$@"
-	fi
-
-	codespeed_opt=
-	test "$GIT_PERF_CODESPEED_OUTPUT" = "true" && codespeed_opt="--codespeed"
-
-	run_dirs "$@"
-
-	if test -z "$GIT_PERF_SEND_TO_CODESPEED"
-	then
-		./aggregate.perl $codespeed_opt "$@"
-	else
-		json_res_file="test-results/$GIT_PERF_SUBSECTION/aggregate.json"
-		./aggregate.perl --codespeed "$@" | tee "$json_res_file"
-		send_data_url="$GIT_PERF_SEND_TO_CODESPEED/result/add/json/"
-		curl -v --request POST --data-urlencode "json=$(cat "$json_res_file")" "$send_data_url"
-	fi
-}
-
-get_var_from_env_or_config "GIT_PERF_CODESPEED_OUTPUT" "perf" "codespeedOutput" "--bool"
-get_var_from_env_or_config "GIT_PERF_SEND_TO_CODESPEED" "perf" "sendToCodespeed"
-
-cd "$(dirname $0)"
-. ../../GIT-BUILD-OPTIONS
-
-mkdir -p test-results
-get_subsections "perf" >test-results/run_subsections.names
-
-if test $(wc -l <test-results/run_subsections.names) -eq 0
-then
-	if test -n "$GIT_PERF_SUBSECTION"
-	then
-		if test -n "$GIT_PERF_CONFIG_FILE"
-		then
-			die "no subsections are defined in config file '$GIT_PERF_CONFIG_FILE'"
-		else
-			die "subsection '$GIT_PERF_SUBSECTION' defined without a config file"
-		fi
-	fi
-	(
-		run_subsection "$@"
-	)
-elif test -n "$GIT_PERF_SUBSECTION"
-then
-	egrep "^$GIT_PERF_SUBSECTION\$" test-results/run_subsections.names >/dev/null ||
-		die "subsection '$GIT_PERF_SUBSECTION' not found in '$GIT_PERF_CONFIG_FILE'"
-
-	egrep "^$GIT_PERF_SUBSECTION\$" test-results/run_subsections.names | while read -r subsec
-	do
-		(
-			GIT_PERF_SUBSECTION="$subsec"
-			export GIT_PERF_SUBSECTION
-			echo "======== Run for subsection '$GIT_PERF_SUBSECTION' ========"
-			run_subsection "$@"
-		)
-	done
-else
-	while read -r subsec
-	do
-		(
-			GIT_PERF_SUBSECTION="$subsec"
-			export GIT_PERF_SUBSECTION
-			echo "======== Run for subsection '$GIT_PERF_SUBSECTION' ========"
-			run_subsection "$@"
-		)
-	done <test-results/run_subsections.names
-fi