Browse Source
* mw/alternates: clone: don't clone the info/alternates file test case for transitive info/alternates Transitively read alternatives repack: honor -d even when no new pack was created clone: keep --reference even with -l -s repo-config: document what value_regexp does a bit more clearly. Release config lock if the regex is invalid core-tutorial.txt: escape asterisk Sparse fix for builtin-diff Fix users of prefix_path() to free() only when necessarymaint
Junio C Hamano
19 years ago
9 changed files with 306 additions and 91 deletions
@ -0,0 +1,78 @@
@@ -0,0 +1,78 @@
|
||||
#!/bin/sh |
||||
# |
||||
# Copyright (C) 2006 Martin Waitz <tali@admingilde.org> |
||||
# |
||||
|
||||
test_description='test clone --reference' |
||||
. ./test-lib.sh |
||||
|
||||
base_dir=`pwd` |
||||
|
||||
test_expect_success 'preparing first repository' \ |
||||
'test_create_repo A && cd A && |
||||
echo first > file1 && |
||||
git add file1 && |
||||
git commit -m initial' |
||||
|
||||
cd "$base_dir" |
||||
|
||||
test_expect_success 'preparing second repository' \ |
||||
'git clone A B && cd B && |
||||
echo second > file2 && |
||||
git add file2 && |
||||
git commit -m addition && |
||||
git repack -a -d && |
||||
git prune' |
||||
|
||||
cd "$base_dir" |
||||
|
||||
test_expect_success 'cloning with reference' \ |
||||
'git clone -l -s --reference B A C' |
||||
|
||||
cd "$base_dir" |
||||
|
||||
test_expect_success 'existance of info/alternates' \ |
||||
'test `wc -l <C/.git/objects/info/alternates` = 2' |
||||
|
||||
cd "$base_dir" |
||||
|
||||
test_expect_success 'pulling from reference' \ |
||||
'cd C && |
||||
git pull ../B' |
||||
|
||||
cd "$base_dir" |
||||
|
||||
test_expect_success 'that reference gets used' \ |
||||
'cd C && |
||||
echo "0 objects, 0 kilobytes" > expected && |
||||
git count-objects > current && |
||||
diff expected current' |
||||
|
||||
cd "$base_dir" |
||||
|
||||
test_expect_success 'updating origin' \ |
||||
'cd A && |
||||
echo third > file3 && |
||||
git add file3 && |
||||
git commit -m update && |
||||
git repack -a -d && |
||||
git prune' |
||||
|
||||
cd "$base_dir" |
||||
|
||||
test_expect_success 'pulling changes from origin' \ |
||||
'cd C && |
||||
git pull origin' |
||||
|
||||
cd "$base_dir" |
||||
|
||||
# the 2 local objects are commit and tree from the merge |
||||
test_expect_success 'that alternate to origin gets used' \ |
||||
'cd C && |
||||
echo "2 objects" > expected && |
||||
git count-objects | cut -d, -f1 > current && |
||||
diff expected current' |
||||
|
||||
cd "$base_dir" |
||||
|
||||
test_done |
@ -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