]>
Commit | Line | Data |
---|---|---|
0232852b NTND |
1 | #!/bin/sh |
2 | ||
3 | test_description='fetch/clone from a shallow clone over http' | |
4 | ||
5 | . ./test-lib.sh | |
0232852b NTND |
6 | . "$TEST_DIRECTORY"/lib-httpd.sh |
7 | start_httpd | |
8 | ||
9 | commit() { | |
10 | echo "$1" >tracked && | |
11 | git add tracked && | |
12 | git commit -m "$1" | |
13 | } | |
14 | ||
15 | test_expect_success 'setup shallow clone' ' | |
16 | commit 1 && | |
17 | commit 2 && | |
18 | commit 3 && | |
19 | commit 4 && | |
20 | commit 5 && | |
21 | commit 6 && | |
22 | commit 7 && | |
23 | git clone --no-local --depth=5 .git shallow && | |
24 | git config --global transfer.fsckObjects true | |
25 | ' | |
26 | ||
27 | test_expect_success 'clone http repository' ' | |
28 | git clone --bare --no-local shallow "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && | |
29 | git clone $HTTPD_URL/smart/repo.git clone && | |
30 | ( | |
31 | cd clone && | |
32 | git fsck && | |
33 | git log --format=%s origin/master >actual && | |
34 | cat <<EOF >expect && | |
35 | 7 | |
36 | 6 | |
37 | 5 | |
38 | 4 | |
39 | 3 | |
40 | EOF | |
41 | test_cmp expect actual | |
42 | ) | |
43 | ' | |
44 | ||
45 | # This test is tricky. We need large enough "have"s that fetch-pack | |
46 | # will put pkt-flush in between. Then we need a "have" the server | |
47 | # does not have, it'll send "ACK %s ready" | |
48 | test_expect_success 'no shallow lines after receiving ACK ready' ' | |
49 | ( | |
50 | cd shallow && | |
f0e802ca | 51 | test_tick && |
0232852b NTND |
52 | for i in $(test_seq 15) |
53 | do | |
54 | git checkout --orphan unrelated$i && | |
55 | test_commit unrelated$i && | |
56 | git push -q "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" \ | |
57 | refs/heads/unrelated$i:refs/heads/unrelated$i && | |
58 | git push -q ../clone/.git \ | |
59 | refs/heads/unrelated$i:refs/heads/unrelated$i || | |
60 | exit 1 | |
61 | done && | |
62 | git checkout master && | |
63 | test_commit new && | |
64 | git push "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" master | |
65 | ) && | |
66 | ( | |
67 | cd clone && | |
68 | git checkout --orphan newnew && | |
69 | test_commit new-too && | |
d790ee17 JT |
70 | # NEEDSWORK: If the overspecification of the expected result is reduced, we |
71 | # might be able to run this test in all protocol versions. | |
72 | GIT_TRACE_PACKET="$TRASH_DIRECTORY/trace" GIT_TEST_PROTOCOL_VERSION= \ | |
73 | git fetch --depth=2 && | |
0232852b NTND |
74 | grep "fetch-pack< ACK .* ready" ../trace && |
75 | ! grep "fetch-pack> done" ../trace | |
76 | ) | |
77 | ' | |
78 | ||
6d43a0ce NTND |
79 | test_expect_success 'clone shallow since ...' ' |
80 | test_create_repo shallow-since && | |
81 | ( | |
82 | cd shallow-since && | |
83 | GIT_COMMITTER_DATE="100000000 +0700" git commit --allow-empty -m one && | |
84 | GIT_COMMITTER_DATE="200000000 +0700" git commit --allow-empty -m two && | |
85 | GIT_COMMITTER_DATE="300000000 +0700" git commit --allow-empty -m three && | |
86 | mv .git "$HTTPD_DOCUMENT_ROOT_PATH/shallow-since.git" && | |
87 | git clone --shallow-since "300000000 +0700" $HTTPD_URL/smart/shallow-since.git ../shallow11 && | |
88 | git -C ../shallow11 log --pretty=tformat:%s HEAD >actual && | |
89 | echo three >expected && | |
90 | test_cmp expected actual | |
91 | ) | |
92 | ' | |
93 | ||
94 | test_expect_success 'fetch shallow since ...' ' | |
95 | git -C shallow11 fetch --shallow-since "200000000 +0700" origin && | |
96 | git -C shallow11 log --pretty=tformat:%s origin/master >actual && | |
97 | cat >expected <<-\EOF && | |
98 | three | |
99 | two | |
100 | EOF | |
101 | test_cmp expected actual | |
102 | ' | |
103 | ||
cdc37277 NTND |
104 | test_expect_success 'shallow clone exclude tag two' ' |
105 | test_create_repo shallow-exclude && | |
106 | ( | |
107 | cd shallow-exclude && | |
108 | test_commit one && | |
109 | test_commit two && | |
110 | test_commit three && | |
111 | mv .git "$HTTPD_DOCUMENT_ROOT_PATH/shallow-exclude.git" && | |
112 | git clone --shallow-exclude two $HTTPD_URL/smart/shallow-exclude.git ../shallow12 && | |
113 | git -C ../shallow12 log --pretty=tformat:%s HEAD >actual && | |
114 | echo three >expected && | |
115 | test_cmp expected actual | |
116 | ) | |
117 | ' | |
118 | ||
119 | test_expect_success 'fetch exclude tag one' ' | |
120 | git -C shallow12 fetch --shallow-exclude one origin && | |
121 | git -C shallow12 log --pretty=tformat:%s origin/master >actual && | |
122 | test_write_lines three two >expected && | |
123 | test_cmp expected actual | |
124 | ' | |
125 | ||
cccf74e2 NTND |
126 | test_expect_success 'fetching deepen' ' |
127 | test_create_repo shallow-deepen && | |
128 | ( | |
129 | cd shallow-deepen && | |
130 | test_commit one && | |
131 | test_commit two && | |
132 | test_commit three && | |
133 | mv .git "$HTTPD_DOCUMENT_ROOT_PATH/shallow-deepen.git" && | |
134 | git clone --depth 1 $HTTPD_URL/smart/shallow-deepen.git deepen && | |
135 | mv "$HTTPD_DOCUMENT_ROOT_PATH/shallow-deepen.git" .git && | |
136 | test_commit four && | |
137 | git -C deepen log --pretty=tformat:%s master >actual && | |
138 | echo three >expected && | |
139 | test_cmp expected actual && | |
140 | mv .git "$HTTPD_DOCUMENT_ROOT_PATH/shallow-deepen.git" && | |
141 | git -C deepen fetch --deepen=1 && | |
142 | git -C deepen log --pretty=tformat:%s origin/master >actual && | |
143 | cat >expected <<-\EOF && | |
144 | four | |
145 | three | |
146 | two | |
147 | EOF | |
148 | test_cmp expected actual | |
149 | ) | |
150 | ' | |
151 | ||
0232852b | 152 | test_done |