path: root/t/perf/aggregate.perl
diff options
authorÆvar Arnfjörð Bjarmason <>2019-05-07 10:54:32 (GMT)
committerJunio C Hamano <>2019-05-08 02:00:28 (GMT)
commitdf0f5021951bd0ae5e7db0d89fd7e5c141c334be (patch)
treec8fddb9dd9ec24982e71be02f43dca2b4644436c /t/perf/aggregate.perl
parent90e38154eeb57f05ac099c42f4b369c8dad9ad2c (diff)
git-df0f5021951bd0ae5e7db0d89fd7e5c141c334be.tar.bz2 remove GIT_TEST_INSTALLED from
Follow-up my preceding change which fixed the immediate "./run <revisions>" regression in 0baf78e7bc (" rely on for --tee handling", 2019-03-15) and entirely get rid of GIT_TEST_INSTALLED from (and aggregate.perl). As noted in that change the dance we're doing with GIT_TEST_INSTALLED isn't necessary, but there I was doing the most minimal set of changes to quickly fix a regression. But it's much simpler to never deal with the "GIT_TEST_INSTALLED" we were setting in at all. Instead the run_dirs_helper() sets the previously inferred $PERF_RESULTS_PREFIX directly. Setting this at the callsite that's already best positioned to exhaustively know about all the different cases we need to handle where PERF_RESULTS_PREFIX isn't what we want already (the empty string) makes the most sense. In one-off cases like: ./run ./ ./ We'll just do the right thing because PERF_RESULTS_PREFIX will be empty, and takes care of finding where our git is. Any refactoring of this code needs to change both the shell code and the Perl code in aggregate.perl, because when running e.g.: ./run ../../ -- <test> The "../../" path to a relative bindir needs to be munged to a filename containing the results, and critically aggregate.perl does not get passed the path to those aggregations, just "../..". Let's fix cases where aggregate.perl would print e.g. ".." in its report output for this, and "git" for "/home/avar/g/git", i.e. it would always pick the last element. Now'll always print the full path instead. This also makes the code sturdier, e.g. you can feed "../.." to "./run" and then an absolute path to the aggregate.perl script, as long as the absolute path and "../.." resolved to the same directory printing the aggregation will work. Also simplify the "[_*]" on the RHS of "tr -c", we're trimming everything to "_", so we don't need that. Signed-off-by: Ævar Arnfjörð Bjarmason <>
Diffstat (limited to 't/perf/aggregate.perl')
1 files changed, 6 insertions, 4 deletions
diff --git a/t/perf/aggregate.perl b/t/perf/aggregate.perl
index f651833..c8f4a78 100755
--- a/t/perf/aggregate.perl
+++ b/t/perf/aggregate.perl
@@ -6,6 +6,7 @@ use warnings;
use JSON;
use Getopt::Long;
use Git;
+use Cwd qw(realpath);
sub get_times {
my $name = shift;
@@ -103,13 +104,14 @@ while (scalar @ARGV) {
if (! -d $arg) {
my $rev = Git::command_oneline(qw(rev-parse --verify), $arg);
$dir = "build/".$rev;
+ } elsif ($arg eq '.') {
+ $dir = '.';
} else {
- $arg =~ s{/*$}{};
- $dir = $arg;
- $dirabbrevs{$dir} = $dir;
+ $dir = realpath($arg);
+ $dirnames{$dir} = $dir;
push @dirs, $dir;
- $dirnames{$dir} = $arg;
+ $dirnames{$dir} ||= $arg;
my $prefix = $dir;
$prefix =~ tr/^a-zA-Z0-9/_/c;
$prefixes{$dir} = $prefix . '.';