Re: [PATCH 2/3] perf: make the tests work in worktrees
From: Junio C Hamano <hidden>
Date: 2016-06-16 02:19:18
Johannes Schindelin [off-list ref] writes:
quoted hunk
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. Signed-off-by: Johannes Schindelin <redacted> --- t/perf/perf-lib.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh index e9020d0..e5682f7 100644 --- a/t/perf/perf-lib.sh +++ b/t/perf/perf-lib.sh@@ -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="$(cd "$source" && git rev-parse --git-dir)" + objects_dir="$(git rev-parse --git-path objects)"
I do not quite understand this change. Whose object_dir is this looking into? The original wanted to peek into $source/.git/objects/ which may have been wrong when $source is borrowing from some other repository, but the new invocation of rev-parse --git-path objects is done inside what repository? It does not seem to pay any attention to $source and the change below just copies from there into $repo. Confused.
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 &&
if test_have_prereq MINGW
then