Browse Source
* mw/alternates: clone: don't clone the info/alternates file test case for transitive info/alternates Transitively read alternativesmaint
Junio C Hamano
19 years ago
3 changed files with 212 additions and 77 deletions
@ -0,0 +1,105 @@
@@ -0,0 +1,105 @@
|
||||
#!/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-objects --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_failure '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 && |
||||
test_valid_repo' |
||||
|
||||
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 neccessary' \ |
||||
'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 |
||||
|
Loading…
Reference in new issue