Merge branch 'jk/alt-odb-cleanup'
Fix a corner-case regression in a topic that graduated during the v2.11 cycle. * jk/alt-odb-cleanup: alternates: re-allow relative paths from environment
This commit is contained in:
commit
0538b84027
@ -296,7 +296,7 @@ static int link_alt_odb_entry(const char *entry, const char *relative_base,
|
|||||||
}
|
}
|
||||||
strbuf_addstr(&pathbuf, entry);
|
strbuf_addstr(&pathbuf, entry);
|
||||||
|
|
||||||
if (strbuf_normalize_path(&pathbuf) < 0) {
|
if (strbuf_normalize_path(&pathbuf) < 0 && relative_base) {
|
||||||
error("unable to normalize alternate object path: %s",
|
error("unable to normalize alternate object path: %s",
|
||||||
pathbuf.buf);
|
pathbuf.buf);
|
||||||
strbuf_release(&pathbuf);
|
strbuf_release(&pathbuf);
|
||||||
|
71
t/t5615-alternate-env.sh
Executable file
71
t/t5615-alternate-env.sh
Executable file
@ -0,0 +1,71 @@
|
|||||||
|
#!/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" >&3 &&
|
||||||
|
echo "$obj $expect" >&4
|
||||||
|
done 3>input 4>expect &&
|
||||||
|
GIT_ALTERNATE_OBJECT_DIRECTORIES=$alt \
|
||||||
|
git "$@" cat-file --batch-check='%(objectname) %(objecttype)' \
|
||||||
|
<input >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
|
||||||
|
'
|
||||||
|
|
||||||
|
test_done
|
Loading…
Reference in New Issue
Block a user