]>
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 && | |
125a05fd JK |
61 | git clone --bare -l -s G H' |
62 | ||
63 | test_expect_success 'invalidity of deepest repository' \ | |
64 | 'cd H && { | |
65 | test_valid_repo | |
66 | test $? -ne 0 | |
67 | }' | |
dd05ea17 MW |
68 | |
69 | cd "$base_dir" | |
70 | ||
71 | test_expect_success 'validity of third repository' \ | |
72 | 'cd C && | |
73 | test_valid_repo' | |
74 | ||
75 | cd "$base_dir" | |
76 | ||
77 | test_expect_success 'validity of fourth repository' \ | |
78 | 'cd D && | |
79 | test_valid_repo' | |
80 | ||
81 | cd "$base_dir" | |
82 | ||
83 | test_expect_success 'breaking of loops' \ | |
f69e836f | 84 | 'echo "$base_dir"/B/.git/objects >> "$base_dir"/A/.git/objects/info/alternates&& |
dd05ea17 | 85 | cd C && |
f69e836f | 86 | test_valid_repo' |
dd05ea17 MW |
87 | |
88 | cd "$base_dir" | |
89 | ||
41ac414e | 90 | test_expect_success 'that info/alternates is necessary' \ |
dd05ea17 | 91 | 'cd C && |
41ac414e JH |
92 | rm -f .git/objects/info/alternates && |
93 | ! (test_valid_repo)' | |
dd05ea17 MW |
94 | |
95 | cd "$base_dir" | |
96 | ||
97 | test_expect_success 'that relative alternate is possible for current dir' \ | |
98 | 'cd C && | |
99 | echo "../../../B/.git/objects" > .git/objects/info/alternates && | |
100 | test_valid_repo' | |
101 | ||
102 | cd "$base_dir" | |
103 | ||
41ac414e JH |
104 | test_expect_success \ |
105 | 'that relative alternate is only possible for current dir' ' | |
106 | cd D && | |
107 | ! (test_valid_repo) | |
108 | ' | |
dd05ea17 MW |
109 | |
110 | cd "$base_dir" | |
111 | ||
112 | test_done |