]> git.ipfire.org Git - thirdparty/git.git/commitdiff
perf-lib.sh: make "./run <revisions>" use the correct gits
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Tue, 7 May 2019 10:54:31 +0000 (12:54 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 8 May 2019 02:00:28 +0000 (11:00 +0900)
Fix a really bad regression in 0baf78e7bc ("perf-lib.sh: rely on
test-lib.sh for --tee handling", 2019-03-15). Since that change all
runs of different <revisions> of git have used the git found in the
user's $PATH, e.g. /usr/bin/git instead of the <revision> we just
built and wanted to performance test.

The problem starts with GIT_TEST_INSTALLED not working like our
non-perf tests with the "run" script. I.e. you can't run performance
tests against a given installed git. Instead we expect to use it
ourselves to point GIT_TEST_INSTALLED to the <revision> we just built.

However, we had been relying on '$(cd "$GIT_TEST_INSTALLED" && pwd)'
to resolve that relative $GIT_TEST_INSTALLED to an absolute
path *before* test-lib.sh was loaded, in cases where it was
e.g. "build/<rev>/bin-wrappers" and we wanted "<abs_path>build/...".

This change post-dates another proposed solution by a few days[1], I
didn't notice that version when I initially wrote this. I'm doing the
most minimal thing to solve the regression here, a follow-up change
will move this result prefix selection logic entirely into the "run"
script.

This makes e.g. these cases all work:

    ./run . $PWD/../../ origin/master origin/next HEAD -- <tests>

As well as just a plain one-off:

    ./run <tests>

And, since we're passing down the new GIT_PERF_DIR_MYDIR_REL we make
sure the bug relating to aggregate.perl not finding our files as
described in 0baf78e7bc doesn't happen again.

What *doesn't* work is setting GIT_TEST_INSTALLED to a relative path,
this will subtly fail in test-lib.sh. This has always been the case
even before 0baf78e7bc, and as documented in t/README the
GIT_TEST_INSTALLED variable should be set to an absolute path (needs
to be set "to the bindir", which is always absolute), and the "perf"
framework expects to munge it itself.

Perhaps that should be dealt with in the future to allow manually
setting GIT_TEST_INSTALLED, but as a preceding commit showed the user
can just use the "run" script, which'll also pick the right output
directory for the test results as expected by aggregate.perl.

1. https://public-inbox.org/git/20190502222409.GA15631@sigill.intra.peff.net/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
t/perf/perf-lib.sh
t/perf/run

index 169f92eae3d419b2d9d4ccdfbde4a394cc9e15dd..b15ee1d262ea82655e3d88da3a8283beacf0386e 100644 (file)
@@ -32,6 +32,10 @@ TEST_NO_MALLOC_CHECK=t
 if test -z "$GIT_TEST_INSTALLED"; then
        perf_results_prefix=
 else
+       if test -n "$GIT_PERF_DIR_MYDIR_REL"
+       then
+               GIT_TEST_INSTALLED=$GIT_PERF_DIR_MYDIR_REL
+       fi
        perf_results_prefix=$(printf "%s" "${GIT_TEST_INSTALLED%/bin-wrappers}" | tr -c "[a-zA-Z0-9]" "[_*]")"."
        GIT_TEST_INSTALLED=$ABSOLUTE_GIT_TEST_INSTALLED
 fi
index 9aaa733c770fb97157e273b6c6d1efd38f9a630a..0a7c8744abef1f7c1719285227e98843c5df3a0f 100755 (executable)
@@ -91,10 +91,14 @@ run_dirs_helper () {
        if test "$mydir" = .; then
                unset GIT_TEST_INSTALLED
        else
-               GIT_TEST_INSTALLED="$mydir/bin-wrappers"
+               GIT_PERF_DIR_MYDIR_REL=$mydir
+               GIT_PERF_DIR_MYDIR_ABS=$(cd $mydir && pwd)
+               export GIT_PERF_DIR_MYDIR_REL GIT_PERF_DIR_MYDIR_ABS
+
+               GIT_TEST_INSTALLED="$GIT_PERF_DIR_MYDIR_ABS/bin-wrappers"
                # Older versions of git lacked bin-wrappers; fallback to the
                # files in the root.
-               test -d "$GIT_TEST_INSTALLED" || GIT_TEST_INSTALLED=$mydir
+               test -d "$GIT_TEST_INSTALLED" || GIT_TEST_INSTALLED=$GIT_PERF_DIR_MYDIR_ABS
                export GIT_TEST_INSTALLED
        fi
        run_one_dir "$@"