perf: make the tests work in worktrees
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 13 May 2016 13:25:58 +0000 (15:25 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 13 May 2016 18:04:07 +0000 (11:04 -0700)
This patch makes perf-lib.sh more robust so that it can run correctly
even inside a worktree. For example, it assumed that $GIT_DIR/objects is
the objects directory (which is not the case for worktrees) and it used
the commondir file verbatim, even if it contained a relative path.

Furthermore, the setup code expected `git rev-parse --git-dir` to spit
out a relative path, which is also not true for worktrees. Let's just
change the code to accept both relative and absolute paths, by avoiding
the `cd` into the copied working directory.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/perf/perf-lib.sh
index 9fa07066d14a4328d654f58fc5bdae4bb31bd214..5ef17440c0e1e63102adddba958686c28b4e80ec 100644 (file)
@@ -80,22 +80,22 @@ test_perf_create_repo_from () {
        error "bug in the test script: not 2 parameters to test-create-repo"
        repo="$1"
        source="$2"
-       source_git=$source/$(cd "$source" && git rev-parse --git-dir)
+       source_git="$(git -C "$source" rev-parse --git-dir)"
+       objects_dir="$(git -C "$source" rev-parse --git-path objects)"
        mkdir -p "$repo/.git"
        (
-               cd "$repo/.git" &&
-               { cp -Rl "$source_git/objects" . 2>/dev/null ||
-                       cp -R "$source_git/objects" .; } &&
+               { 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)
+                               */objects|*/hooks|*/config|*/commondir)
                                        ;;
                                *)
-                                       cp -R "$stuff" . || exit 1
+                                       cp -R "$stuff" "$repo/.git/" || exit 1
                                        ;;
                        esac
                done &&
-               cd .. &&
+               cd "$repo" &&
                git init -q && {
                        test_have_prereq SYMLINKS ||
                        git config core.symlinks false