mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
![Bryan Donlan](/assets/img/avatar_default.png)
This fixes the remainder of the issues where the test script itself is at fault for failing when the git checkout path contains whitespace or other shell metacharacters. The majority of git svn tests used the idiom test_expect_success "title" "test script using $svnrepo" These were changed to have the test script in single-quotes: test_expect_success "title" 'test script using "$svnrepo"' which unfortunately makes the patch appear larger than it really is. One consequence of this change is that in the verbose test output the value of $svnrepo (and in some cases other variables, too) is no longer expanded, i.e. previously we saw * expecting success: test script using /path/to/git/t/trash/svnrepo but now it is: * expecting success: test script using "$svnrepo" Signed-off-by: Bryan Donlan <bdonlan@fushizen.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
113 lines
2.3 KiB
Bash
Executable file
113 lines
2.3 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_success 'that info/alternates is necessary' \
|
|
'cd C &&
|
|
rm -f .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_success \
|
|
'that relative alternate is only possible for current dir' '
|
|
cd D &&
|
|
! (test_valid_repo)
|
|
'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_done
|