t/perf/run: fix bin-wrappers computation
PATCH 1/1 t/perf/run: fix bin-wrappers computation
From: Derrick Stolee <[email protected]>
The GIT_TEST_INSTALLED was moved from perf-lib.sh to run in df0f5021 (perf-lib.sh: remove GIT_TEST_INSTALLED from perf-lib.sh, 2019-05-07) and that included a change to how it inspected the existence of a bin-wrappers directory. However, that included a typo that made the match of bin-wrappers never work. Specifically, the assignment was
mydir_abs_wrappers="$mydir_abs_wrappers/bin-wrappers"
which uses the same variable before it is initialized. By changing it to
mydir_abs_wrappers="$mydir_abs/bin-wrappers"
We can correctly use the bin-wrappers directory.
This is critical to successfully computing performance of commands that execute subcommands. The bin-wrappers ensure that the --exec-path is set correctly.
---
t/perf/run: fix bin-wrappers computation
Found this while we were testing sparse index improvements to 'git stash', which uses a lot of subcommands.
Thanks, -Stolee
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1044%2Fderrickstolee%2Fperf-run-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1044/derrickstolee/perf-run-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1044
t/perf/run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
t/perf/run +1 -1
@@ -74,7 +74,7 @@ set_git_test_installed () { mydir=$1 mydir_abs=$(cd $mydir && pwd) - mydir_abs_wrappers="$mydir_abs_wrappers/bin-wrappers" + mydir_abs_wrappers="$mydir_abs/bin-wrappers" if test -d "$mydir_abs_wrappers" then GIT_TEST_INSTALLED=$mydir_abs_wrappers
base-commit: 225bc32a989d7a22fa6addafd4ce7dcd04675dbf
Signature · 1 line
gitgitgadget
Quoted 3 lines · Derrick Stolee via GitGitGadget
This is critical to successfully computing performance of commands that execute subcommands. The bin-wrappers ensure that the --exec-path is set correctly.
Just sanity-checking everything you said: with this bug, we'll set mydir_abs_wrappers to "/bin-wrappers", then realize that directory doesn't exist, and fall back to GIT_TEST_INSTALLED=$mydir_abs. Putting 'set -x' at the top of t/perf/run, we can see the relevant section:
+ mydir=build/73cd7d9420bb7d75207e8149521db375c789a81c
+ cd build/73cd7d9420bb7d75207e8149521db375c789a81c
+ pwd
+ mydir_abs=/home/ttaylorr/src/git/t/perf/build/73cd7d9420bb7d75207e8149521db375c789a81c
+ mydir_abs_wrappers=/bin-wrappers
+ test -d /bin-wrappers
+ GIT_TEST_INSTALLED=/home/ttaylorr/src/git/t/perf/build/73cd7d9420bb7d75207e8149521db375c789a81c
+ export GIT_TEST_INSTALLED
OK. But the real problem is in t/test-lib.sh where we read "$GIT_TEST_INSTALLED". There we ask for the --exec-path, which appears to be wrong, at least in my setup. Printing out the $GIT_EXEC_PATH and $GIT_TEST_INSTALLED, I get:
/home/ttaylorr/local/git/ds.sparse-checkout/libexec/git-core, /home/ttaylorr/src/git/t/perf/build/73cd7d9420bb7d75207e8149521db375c789a81c
where the former is the branch I happen to have checked out, and the latter is the revision that I asked to run performance tests on via t/perf/run.
So I think we'll run the right top-level Git command since the latter path ends up first in our $PATH, but the exec path is definitely wrong.
t/perf/run set_git_test_installed () { · line 77
Quoted 10 lines
t/perf/run +1
-1@@ -74,7 +74,7 @@ set_git_test_installed () { mydir=$1 mydir_abs=$(cd $mydir && pwd) - mydir_abs_wrappers="$mydir_abs_wrappers/bin-wrappers" + mydir_abs_wrappers="$mydir_abs/bin-wrappers"
This fix looks obviously right to me (and gives me the expected output from above when I apply it locally).
Thanks,
Taylor
Quoted 27 lines · Taylor Blau
Quoted 3 lines · Derrick Stolee via GitGitGadget
This is critical to successfully computing performance of commands that execute subcommands. The bin-wrappers ensure that the --exec-path is set correctly.
Just sanity-checking everything you said: with this bug, we'll set
mydir_abs_wrappersto "/bin-wrappers", then realize that directory doesn't exist, and fall back to GIT_TEST_INSTALLED=$mydir_abs. Putting 'set -x' at the top of t/perf/run, we can see the relevant section:+ mydir=build/73cd7d9420bb7d75207e8149521db375c789a81c
+ cd build/73cd7d9420bb7d75207e8149521db375c789a81c
+ pwd
+ mydir_abs=/home/ttaylorr/src/git/t/perf/build/73cd7d9420bb7d75207e8149521db375c789a81c
+ mydir_abs_wrappers=/bin-wrappers
+ test -d /bin-wrappers
+ GIT_TEST_INSTALLED=/home/ttaylorr/src/git/t/perf/build/73cd7d9420bb7d75207e8149521db375c789a81c
+ exportGIT_TEST_INSTALLEDOK. But the real problem is in
t/test-lib.shwhere we read "$GIT_TEST_INSTALLED". There we ask for the--exec-path, which appears to be wrong, at least in my setup. Printing out the $GIT_EXEC_PATH and $GIT_TEST_INSTALLED, I get:
/home/ttaylorr/local/git/ds.sparse-checkout/libexec/git-core,/home/ttaylorr/src/git/t/perf/build/73cd7d9420bb7d75207e8149521db375c789a81c
Quoted 6 lines
where the former is the branch I happen to have checked out, and the latter is the revision that I asked to run performance tests on via t/perf/run.
So I think we'll run the right top-level Git command since the latter path ends up first in our $PATH, but the exec path is definitely wrong.
Thanks for digging into this more. This issue with GIT_EXEC_PATH explains some strangeness I was seeing.
Perhaps there is something more robust to be done around GIT_EXEC_PATH, but the current fix satisfies my needs.
Quoted 7 lines
Quoted 7 lines
t/perf/run +0
-0@@ -74,7 +74,7 @@ set_git_test_installed () { mydir=$1
Quoted 6 lines
t/perf/run set_git_test_installed () { · line 77
Quoted 3 lines
t/perf/run +1
-1mydir_abs=$(cd $mydir && pwd) - mydir_abs_wrappers="$mydir_abs_wrappers/bin-wrappers" + mydir_abs_wrappers="$mydir_abs/bin-wrappers"This fix looks obviously right to me (and gives me the expected output from above when I apply it locally).
Thanks,
-Stolee