9288bedafa
The test 'creating too deep nesting' can fail even when cloning the repos, but is not its main purpose (it has to prepare nested repos and ensure the last one is invalid). So split the test into the creation and invalidity checking parts. Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
111 lines
2.2 KiB
Bash
Executable File
111 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (C) 2006 Martin Waitz <tali@admingilde.org>
|
|
#
|
|
|
|
test_description='test transitive info/alternate entries'
|
|
. ./test-lib.sh
|
|
|
|
# test that a file is not reachable in the current repository
|
|
# but that it is after creating a info/alternate entry
|
|
reachable_via() {
|
|
alternate="$1"
|
|
file="$2"
|
|
if git cat-file -e "HEAD:$file"; then return 1; fi
|
|
echo "$alternate" >> .git/objects/info/alternate
|
|
git cat-file -e "HEAD:$file"
|
|
}
|
|
|
|
test_valid_repo() {
|
|
git fsck --full > fsck.log &&
|
|
test `wc -l < fsck.log` = 0
|
|
}
|
|
|
|
base_dir=`pwd`
|
|
|
|
test_expect_success 'preparing first repository' \
|
|
'test_create_repo A && cd A &&
|
|
echo "Hello World" > file1 &&
|
|
git add file1 &&
|
|
git commit -m "Initial commit" file1 &&
|
|
git repack -a -d &&
|
|
git prune'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'preparing second repository' \
|
|
'git clone -l -s A B && cd B &&
|
|
echo "foo bar" > file2 &&
|
|
git add file2 &&
|
|
git commit -m "next commit" file2 &&
|
|
git repack -a -d -l &&
|
|
git prune'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'preparing third repository' \
|
|
'git clone -l -s B C && cd C &&
|
|
echo "Goodbye, cruel world" > file3 &&
|
|
git add file3 &&
|
|
git commit -m "one more" file3 &&
|
|
git repack -a -d -l &&
|
|
git prune'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'creating too deep nesting' \
|
|
'git clone -l -s C D &&
|
|
git clone -l -s D E &&
|
|
git clone -l -s E F &&
|
|
git clone -l -s F G &&
|
|
git clone -l -s G H'
|
|
|
|
test_expect_success 'invalidity of deepest repository' \
|
|
'cd H && {
|
|
test_valid_repo
|
|
test $? -ne 0
|
|
}'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'validity of third repository' \
|
|
'cd C &&
|
|
test_valid_repo'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'validity of fourth repository' \
|
|
'cd D &&
|
|
test_valid_repo'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'breaking of loops' \
|
|
"echo '$base_dir/B/.git/objects' >> '$base_dir'/A/.git/objects/info/alternates&&
|
|
cd C &&
|
|
test_valid_repo"
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_failure 'that info/alternates is necessary' \
|
|
'cd C &&
|
|
rm .git/objects/info/alternates &&
|
|
test_valid_repo'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'that relative alternate is possible for current dir' \
|
|
'cd C &&
|
|
echo "../../../B/.git/objects" > .git/objects/info/alternates &&
|
|
test_valid_repo'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_failure 'that relative alternate is only possible for current dir' \
|
|
'cd D &&
|
|
test_valid_repo'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_done
|