]>
Commit | Line | Data |
---|---|---|
dd05ea17 MW |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (C) 2006 Martin Waitz <tali@admingilde.org> | |
4 | # | |
5 | ||
6 | test_description='test transitive info/alternate entries' | |
7 | . ./test-lib.sh | |
8 | ||
9 | # test that a file is not reachable in the current repository | |
10 | # but that it is after creating a info/alternate entry | |
11 | reachable_via() { | |
12 | alternate="$1" | |
13 | file="$2" | |
14 | if git cat-file -e "HEAD:$file"; then return 1; fi | |
15 | echo "$alternate" >> .git/objects/info/alternate | |
16 | git cat-file -e "HEAD:$file" | |
17 | } | |
18 | ||
19 | test_valid_repo() { | |
df391b19 | 20 | git fsck --full > fsck.log && |
3fb0459b | 21 | test_line_count = 0 fsck.log |
dd05ea17 MW |
22 | } |
23 | ||
24 | base_dir=`pwd` | |
25 | ||
26 | test_expect_success 'preparing first repository' \ | |
27 | 'test_create_repo A && cd A && | |
28 | echo "Hello World" > file1 && | |
29 | git add file1 && | |
30 | git commit -m "Initial commit" file1 && | |
31 | git repack -a -d && | |
026aa938 | 32 | git prune' |
dd05ea17 MW |
33 | |
34 | cd "$base_dir" | |
35 | ||
36 | test_expect_success 'preparing second repository' \ | |
37 | 'git clone -l -s A B && cd B && | |
38 | echo "foo bar" > file2 && | |
39 | git add file2 && | |
40 | git commit -m "next commit" file2 && | |
41 | git repack -a -d -l && | |
026aa938 | 42 | git prune' |
dd05ea17 MW |
43 | |
44 | cd "$base_dir" | |
45 | ||
46 | test_expect_success 'preparing third repository' \ | |
47 | 'git clone -l -s B C && cd C && | |
48 | echo "Goodbye, cruel world" > file3 && | |
49 | git add file3 && | |
50 | git commit -m "one more" file3 && | |
51 | git repack -a -d -l && | |
026aa938 | 52 | git prune' |
dd05ea17 MW |
53 | |
54 | cd "$base_dir" | |
55 | ||
9288beda | 56 | test_expect_success 'creating too deep nesting' \ |
dd05ea17 MW |
57 | 'git clone -l -s C D && |
58 | git clone -l -s D E && | |
59 | git clone -l -s E F && | |
60 | git clone -l -s F G && | |
0433ad12 | 61 | test_must_fail git clone --bare -l -s G H' |
dd05ea17 MW |
62 | |
63 | cd "$base_dir" | |
64 | ||
65 | test_expect_success 'validity of third repository' \ | |
66 | 'cd C && | |
67 | test_valid_repo' | |
68 | ||
69 | cd "$base_dir" | |
70 | ||
71 | test_expect_success 'validity of fourth repository' \ | |
72 | 'cd D && | |
73 | test_valid_repo' | |
74 | ||
75 | cd "$base_dir" | |
76 | ||
77 | test_expect_success 'breaking of loops' \ | |
f69e836f | 78 | 'echo "$base_dir"/B/.git/objects >> "$base_dir"/A/.git/objects/info/alternates&& |
dd05ea17 | 79 | cd C && |
f69e836f | 80 | test_valid_repo' |
dd05ea17 MW |
81 | |
82 | cd "$base_dir" | |
83 | ||
41ac414e | 84 | test_expect_success 'that info/alternates is necessary' \ |
dd05ea17 | 85 | 'cd C && |
41ac414e JH |
86 | rm -f .git/objects/info/alternates && |
87 | ! (test_valid_repo)' | |
dd05ea17 MW |
88 | |
89 | cd "$base_dir" | |
90 | ||
91 | test_expect_success 'that relative alternate is possible for current dir' \ | |
92 | 'cd C && | |
93 | echo "../../../B/.git/objects" > .git/objects/info/alternates && | |
94 | test_valid_repo' | |
95 | ||
96 | cd "$base_dir" | |
97 | ||
41ac414e JH |
98 | test_expect_success \ |
99 | 'that relative alternate is only possible for current dir' ' | |
100 | cd D && | |
101 | ! (test_valid_repo) | |
102 | ' | |
dd05ea17 MW |
103 | |
104 | cd "$base_dir" | |
105 | ||
106 | test_done |