#!/bin/sh test_description='handling of alternates in environment variables' . ./test-lib.sh check_obj () { alt=$1; shift while read obj expect do echo "$obj" >&5 && echo "$obj $expect" >&6 done 5>input 6>expect && GIT_ALTERNATE_OBJECT_DIRECTORIES=$alt \ git "$@" cat-file --batch-check='%(objectname) %(objecttype)' \ actual && test_cmp expect actual } test_expect_success 'create alternate repositories' ' git init --bare one.git && one=$(echo one | git -C one.git hash-object -w --stdin) && git init --bare two.git && two=$(echo two | git -C two.git hash-object -w --stdin) ' test_expect_success 'objects inaccessible without alternates' ' check_obj "" <<-EOF $one missing $two missing EOF ' test_expect_success 'access alternate via absolute path' ' check_obj "$PWD/one.git/objects" <<-EOF $one blob $two missing EOF ' test_expect_success 'access multiple alternates' ' check_obj "$PWD/one.git/objects:$PWD/two.git/objects" <<-EOF $one blob $two blob EOF ' # bare paths are relative from $GIT_DIR test_expect_success 'access alternate via relative path (bare)' ' git init --bare bare.git && check_obj "../one.git/objects" -C bare.git <<-EOF $one blob EOF ' # non-bare paths are relative to top of worktree test_expect_success 'access alternate via relative path (worktree)' ' git init worktree && check_obj "../one.git/objects" -C worktree <<-EOF $one blob EOF ' # path is computed after moving to top-level of worktree test_expect_success 'access alternate via relative path (subdir)' ' mkdir subdir && check_obj "one.git/objects" -C subdir <<-EOF $one blob EOF ' # set variables outside test to avoid quote insanity; the \057 is '/', # which doesn't need quoting, but just confirms that de-quoting # is working. quoted='"one.git\057objects"' unquoted='two.git/objects' test_expect_success 'mix of quoted and unquoted alternates' ' check_obj "$quoted:$unquoted" <<-EOF $one blob $two blob EOF ' test_expect_success !MINGW 'broken quoting falls back to interpreting raw' ' mv one.git \"one.git && check_obj \"one.git/objects <<-EOF $one blob EOF ' test_done