Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
| 3 | # Copyright (c) 2005 Johannes Schindelin |
| 4 | # |
| 5 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 6 | test_description='Testing multi_ack pack fetching' |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 7 | |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 8 | . ./test-lib.sh |
| 9 | |
| 10 | # Test fetch-pack/upload-pack pair. |
| 11 | |
| 12 | # Some convenience functions |
| 13 | |
Eric Wong | 1010437 | 2006-05-25 19:06:17 -0700 | [diff] [blame] | 14 | add () { |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 15 | name=$1 && |
| 16 | text="$@" && |
| 17 | branch=`echo $name | sed -e 's/^\(.\).*$/\1/'` && |
| 18 | parents="" && |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 19 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 20 | shift && |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 21 | while test $1; do |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 22 | parents="$parents -p $1" && |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 23 | shift |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 24 | done && |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 25 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 26 | echo "$text" > test.txt && |
| 27 | git update-index --add test.txt && |
| 28 | tree=$(git write-tree) && |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 29 | # make sure timestamps are in correct order |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 30 | test_tick && |
| 31 | commit=$(echo "$text" | git commit-tree $tree $parents) && |
| 32 | eval "$name=$commit; export $name" && |
| 33 | echo $commit > .git/refs/heads/$branch && |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 34 | eval ${branch}TIP=$commit |
| 35 | } |
| 36 | |
Eric Wong | 1010437 | 2006-05-25 19:06:17 -0700 | [diff] [blame] | 37 | pull_to_client () { |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 38 | number=$1 && |
| 39 | heads=$2 && |
| 40 | count=$3 && |
| 41 | test_expect_success "$number pull" ' |
| 42 | ( |
| 43 | cd client && |
| 44 | git fetch-pack -k -v .. $heads && |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 45 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 46 | case "$heads" in |
| 47 | *A*) |
| 48 | echo $ATIP > .git/refs/heads/A;; |
| 49 | esac && |
| 50 | case "$heads" in *B*) |
| 51 | echo $BTIP > .git/refs/heads/B;; |
| 52 | esac && |
| 53 | git symbolic-ref HEAD refs/heads/`echo $heads \ |
| 54 | | sed -e "s/^\(.\).*$/\1/"` && |
Junio C Hamano | 7f732c6 | 2006-04-13 22:28:06 -0700 | [diff] [blame] | 55 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 56 | git fsck --full && |
Junio C Hamano | 7f732c6 | 2006-04-13 22:28:06 -0700 | [diff] [blame] | 57 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 58 | mv .git/objects/pack/pack-* . && |
| 59 | p=`ls -1 pack-*.pack` && |
| 60 | git unpack-objects <$p && |
| 61 | git fsck --full && |
Junio C Hamano | 7f732c6 | 2006-04-13 22:28:06 -0700 | [diff] [blame] | 62 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 63 | idx=`echo pack-*.idx` && |
| 64 | pack_count=`git show-index <$idx | wc -l` && |
| 65 | test $pack_count = $count && |
| 66 | rm -f pack-* |
| 67 | ) |
| 68 | ' |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 69 | } |
| 70 | |
| 71 | # Here begins the actual testing |
| 72 | |
| 73 | # A1 - ... - A20 - A21 |
| 74 | # \ |
| 75 | # B1 - B2 - .. - B70 |
| 76 | |
| 77 | # client pulls A20, B1. Then tracks only B. Then pulls A. |
| 78 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 79 | test_expect_success 'setup' ' |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 80 | mkdir client && |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 81 | ( |
| 82 | cd client && |
| 83 | git init && |
| 84 | git config transfer.unpacklimit 0 |
| 85 | ) && |
| 86 | add A1 && |
| 87 | prev=1 && |
| 88 | cur=2 && |
| 89 | while [ $cur -le 10 ]; do |
| 90 | add A$cur $(eval echo \$A$prev) && |
| 91 | prev=$cur && |
| 92 | cur=$(($cur+1)) |
| 93 | done && |
Jonathan Nieder | a48fcd8 | 2010-10-30 20:46:54 -0500 | [diff] [blame] | 94 | add B1 $A1 && |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 95 | echo $ATIP > .git/refs/heads/A && |
| 96 | echo $BTIP > .git/refs/heads/B && |
| 97 | git symbolic-ref HEAD refs/heads/B |
| 98 | ' |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 99 | |
Jeff King | e9d866e | 2011-12-12 19:44:40 -0500 | [diff] [blame] | 100 | pull_to_client 1st "refs/heads/B refs/heads/A" $((11*3)) |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 101 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 102 | test_expect_success 'post 1st pull setup' ' |
| 103 | add A11 $A10 && |
| 104 | prev=1 && |
| 105 | cur=2 && |
| 106 | while [ $cur -le 65 ]; do |
| 107 | add B$cur $(eval echo \$B$prev) && |
| 108 | prev=$cur && |
| 109 | cur=$(($cur+1)) |
| 110 | done |
| 111 | ' |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 112 | |
Jeff King | e9d866e | 2011-12-12 19:44:40 -0500 | [diff] [blame] | 113 | pull_to_client 2nd "refs/heads/B" $((64*3)) |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 114 | |
Jeff King | e9d866e | 2011-12-12 19:44:40 -0500 | [diff] [blame] | 115 | pull_to_client 3rd "refs/heads/A" $((1*3)) |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 116 | |
Nguyễn Thái Ngọc Duy | 3e6e0ed | 2012-01-07 21:45:59 +0700 | [diff] [blame] | 117 | test_expect_success 'single branch clone' ' |
| 118 | git clone --single-branch "file://$(pwd)/." singlebranch |
| 119 | ' |
| 120 | |
| 121 | test_expect_success 'single branch object count' ' |
| 122 | GIT_DIR=singlebranch/.git git count-objects -v | |
| 123 | grep "^in-pack:" > count.singlebranch && |
| 124 | echo "in-pack: 198" >expected && |
| 125 | test_cmp expected count.singlebranch |
| 126 | ' |
| 127 | |
Nguyễn Thái Ngọc Duy | 0ec4b16 | 2012-06-22 16:35:47 +0700 | [diff] [blame] | 128 | test_expect_success 'single given branch clone' ' |
| 129 | git clone --single-branch --branch A "file://$(pwd)/." branch-a && |
| 130 | test_must_fail git --git-dir=branch-a/.git rev-parse origin/B |
| 131 | ' |
| 132 | |
Nguyễn Thái Ngọc Duy | 682c7d2 | 2013-01-11 16:05:47 +0700 | [diff] [blame] | 133 | test_expect_success 'clone shallow depth 1' ' |
| 134 | git clone --no-single-branch --depth 1 "file://$(pwd)/." shallow0 && |
| 135 | test "`git --git-dir=shallow0/.git rev-list --count HEAD`" = 1 |
| 136 | ' |
| 137 | |
Nguyễn Thái Ngọc Duy | 6035d6a | 2013-05-26 08:16:15 +0700 | [diff] [blame] | 138 | test_expect_success 'clone shallow depth 1 with fsck' ' |
| 139 | git config --global fetch.fsckobjects true && |
| 140 | git clone --no-single-branch --depth 1 "file://$(pwd)/." shallow0fsck && |
| 141 | test "`git --git-dir=shallow0fsck/.git rev-list --count HEAD`" = 1 && |
| 142 | git config --global --unset fetch.fsckobjects |
| 143 | ' |
| 144 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 145 | test_expect_success 'clone shallow' ' |
Nguyễn Thái Ngọc Duy | 3e6e0ed | 2012-01-07 21:45:59 +0700 | [diff] [blame] | 146 | git clone --no-single-branch --depth 2 "file://$(pwd)/." shallow |
Junio C Hamano | 37818d7 | 2006-12-27 02:43:46 -0800 | [diff] [blame] | 147 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 148 | |
Nguyễn Thái Ngọc Duy | 682c7d2 | 2013-01-11 16:05:47 +0700 | [diff] [blame] | 149 | test_expect_success 'clone shallow depth count' ' |
| 150 | test "`git --git-dir=shallow/.git rev-list --count HEAD`" = 2 |
| 151 | ' |
| 152 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 153 | test_expect_success 'clone shallow object count' ' |
| 154 | ( |
| 155 | cd shallow && |
| 156 | git count-objects -v |
| 157 | ) > count.shallow && |
Nguyễn Thái Ngọc Duy | 682c7d2 | 2013-01-11 16:05:47 +0700 | [diff] [blame] | 158 | grep "^in-pack: 12" count.shallow |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 159 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 160 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 161 | test_expect_success 'clone shallow object count (part 2)' ' |
| 162 | sed -e "/^in-pack:/d" -e "/^packs:/d" -e "/^size-pack:/d" \ |
| 163 | -e "/: 0$/d" count.shallow > count_output && |
| 164 | ! test -s count_output |
| 165 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 166 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 167 | test_expect_success 'fsck in shallow repo' ' |
| 168 | ( |
| 169 | cd shallow && |
| 170 | git fsck --full |
| 171 | ) |
| 172 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 173 | |
Nicolas Pitre | 8638682 | 2009-08-24 00:04:09 -0400 | [diff] [blame] | 174 | test_expect_success 'simple fetch in shallow repo' ' |
| 175 | ( |
| 176 | cd shallow && |
| 177 | git fetch |
| 178 | ) |
| 179 | ' |
| 180 | |
| 181 | test_expect_success 'no changes expected' ' |
| 182 | ( |
| 183 | cd shallow && |
| 184 | git count-objects -v |
| 185 | ) > count.shallow.2 && |
| 186 | cmp count.shallow count.shallow.2 |
| 187 | ' |
| 188 | |
| 189 | test_expect_success 'fetch same depth in shallow repo' ' |
| 190 | ( |
| 191 | cd shallow && |
| 192 | git fetch --depth=2 |
| 193 | ) |
| 194 | ' |
| 195 | |
| 196 | test_expect_success 'no changes expected' ' |
| 197 | ( |
| 198 | cd shallow && |
| 199 | git count-objects -v |
| 200 | ) > count.shallow.3 && |
| 201 | cmp count.shallow count.shallow.3 |
| 202 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 203 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 204 | test_expect_success 'add two more' ' |
| 205 | add B66 $B65 && |
| 206 | add B67 $B66 |
| 207 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 208 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 209 | test_expect_success 'pull in shallow repo' ' |
| 210 | ( |
| 211 | cd shallow && |
| 212 | git pull .. B |
| 213 | ) |
| 214 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 215 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 216 | test_expect_success 'clone shallow object count' ' |
| 217 | ( |
| 218 | cd shallow && |
| 219 | git count-objects -v |
| 220 | ) > count.shallow && |
| 221 | grep "^count: 6" count.shallow |
| 222 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 223 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 224 | test_expect_success 'add two more (part 2)' ' |
| 225 | add B68 $B67 && |
| 226 | add B69 $B68 |
| 227 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 228 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 229 | test_expect_success 'deepening pull in shallow repo' ' |
| 230 | ( |
| 231 | cd shallow && |
| 232 | git pull --depth 4 .. B |
| 233 | ) |
| 234 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 235 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 236 | test_expect_success 'clone shallow object count' ' |
| 237 | ( |
| 238 | cd shallow && |
| 239 | git count-objects -v |
| 240 | ) > count.shallow && |
| 241 | grep "^count: 12" count.shallow |
| 242 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 243 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 244 | test_expect_success 'deepening fetch in shallow repo' ' |
| 245 | ( |
| 246 | cd shallow && |
| 247 | git fetch --depth 4 .. A:A |
| 248 | ) |
| 249 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 250 | |
Stephen Boyd | 3902985 | 2009-05-25 23:17:14 -0700 | [diff] [blame] | 251 | test_expect_success 'clone shallow object count' ' |
| 252 | ( |
| 253 | cd shallow && |
| 254 | git count-objects -v |
| 255 | ) > count.shallow && |
| 256 | grep "^count: 18" count.shallow |
| 257 | ' |
| 258 | |
| 259 | test_expect_success 'pull in shallow repo with missing merge base' ' |
| 260 | ( |
| 261 | cd shallow && |
| 262 | test_must_fail git pull --depth 4 .. A |
| 263 | ) |
| 264 | ' |
Johannes Schindelin | 16ad357 | 2006-10-30 20:10:13 +0100 | [diff] [blame] | 265 | |
Nicolas Pitre | 8638682 | 2009-08-24 00:04:09 -0400 | [diff] [blame] | 266 | test_expect_success 'additional simple shallow deepenings' ' |
| 267 | ( |
| 268 | cd shallow && |
| 269 | git fetch --depth=8 && |
| 270 | git fetch --depth=10 && |
| 271 | git fetch --depth=11 |
| 272 | ) |
| 273 | ' |
| 274 | |
Nguyễn Thái Ngọc Duy | 682c7d2 | 2013-01-11 16:05:47 +0700 | [diff] [blame] | 275 | test_expect_success 'clone shallow depth count' ' |
| 276 | test "`git --git-dir=shallow/.git rev-list --count HEAD`" = 11 |
| 277 | ' |
| 278 | |
Nicolas Pitre | 8638682 | 2009-08-24 00:04:09 -0400 | [diff] [blame] | 279 | test_expect_success 'clone shallow object count' ' |
| 280 | ( |
| 281 | cd shallow && |
| 282 | git count-objects -v |
| 283 | ) > count.shallow && |
Nguyễn Thái Ngọc Duy | 682c7d2 | 2013-01-11 16:05:47 +0700 | [diff] [blame] | 284 | grep "^count: 55" count.shallow |
Nicolas Pitre | 8638682 | 2009-08-24 00:04:09 -0400 | [diff] [blame] | 285 | ' |
| 286 | |
Nguyễn Thái Ngọc Duy | 4dcb167 | 2013-01-11 16:05:46 +0700 | [diff] [blame] | 287 | test_expect_success 'fetch --no-shallow on full repo' ' |
| 288 | test_must_fail git fetch --noshallow |
| 289 | ' |
| 290 | |
| 291 | test_expect_success 'fetch --depth --no-shallow' ' |
| 292 | ( |
| 293 | cd shallow && |
| 294 | test_must_fail git fetch --depth=1 --noshallow |
| 295 | ) |
| 296 | ' |
| 297 | |
| 298 | test_expect_success 'turn shallow to complete repository' ' |
| 299 | ( |
| 300 | cd shallow && |
| 301 | git fetch --unshallow && |
| 302 | ! test -f .git/shallow && |
| 303 | git fsck --full |
| 304 | ) |
| 305 | ' |
| 306 | |
Nguyễn Thái Ngọc Duy | 3e6e0ed | 2012-01-07 21:45:59 +0700 | [diff] [blame] | 307 | test_expect_success 'clone shallow without --no-single-branch' ' |
| 308 | git clone --depth 1 "file://$(pwd)/." shallow2 |
| 309 | ' |
| 310 | |
| 311 | test_expect_success 'clone shallow object count' ' |
| 312 | ( |
| 313 | cd shallow2 && |
| 314 | git count-objects -v |
| 315 | ) > count.shallow2 && |
Nguyễn Thái Ngọc Duy | 682c7d2 | 2013-01-11 16:05:47 +0700 | [diff] [blame] | 316 | grep "^in-pack: 3" count.shallow2 |
Nguyễn Thái Ngọc Duy | 3e6e0ed | 2012-01-07 21:45:59 +0700 | [diff] [blame] | 317 | ' |
| 318 | |
| 319 | test_expect_success 'clone shallow with --branch' ' |
| 320 | git clone --depth 1 --branch A "file://$(pwd)/." shallow3 |
| 321 | ' |
| 322 | |
| 323 | test_expect_success 'clone shallow object count' ' |
Nguyễn Thái Ngọc Duy | 682c7d2 | 2013-01-11 16:05:47 +0700 | [diff] [blame] | 324 | echo "in-pack: 3" > count3.expected && |
Nguyễn Thái Ngọc Duy | 3e6e0ed | 2012-01-07 21:45:59 +0700 | [diff] [blame] | 325 | GIT_DIR=shallow3/.git git count-objects -v | |
| 326 | grep "^in-pack" > count3.actual && |
| 327 | test_cmp count3.expected count3.actual |
| 328 | ' |
| 329 | |
Nguyễn Thái Ngọc Duy | 3e6e0ed | 2012-01-07 21:45:59 +0700 | [diff] [blame] | 330 | test_expect_success 'clone shallow with detached HEAD' ' |
| 331 | git checkout HEAD^ && |
| 332 | git clone --depth 1 "file://$(pwd)/." shallow5 && |
| 333 | git checkout - && |
| 334 | GIT_DIR=shallow5/.git git rev-parse HEAD >actual && |
| 335 | git rev-parse HEAD^ >expected && |
| 336 | test_cmp expected actual |
| 337 | ' |
| 338 | |
| 339 | test_expect_success 'shallow clone pulling tags' ' |
| 340 | git tag -a -m A TAGA1 A && |
| 341 | git tag -a -m B TAGB1 B && |
| 342 | git tag TAGA2 A && |
| 343 | git tag TAGB2 B && |
| 344 | git clone --depth 1 "file://$(pwd)/." shallow6 && |
| 345 | |
| 346 | cat >taglist.expected <<\EOF && |
| 347 | TAGB1 |
| 348 | TAGB2 |
| 349 | EOF |
| 350 | GIT_DIR=shallow6/.git git tag -l >taglist.actual && |
| 351 | test_cmp taglist.expected taglist.actual && |
| 352 | |
Nguyễn Thái Ngọc Duy | 682c7d2 | 2013-01-11 16:05:47 +0700 | [diff] [blame] | 353 | echo "in-pack: 4" > count6.expected && |
Nguyễn Thái Ngọc Duy | 3e6e0ed | 2012-01-07 21:45:59 +0700 | [diff] [blame] | 354 | GIT_DIR=shallow6/.git git count-objects -v | |
| 355 | grep "^in-pack" > count6.actual && |
| 356 | test_cmp count6.expected count6.actual |
| 357 | ' |
| 358 | |
Nguyễn Thái Ngọc Duy | 5a7d5b6 | 2012-01-16 16:46:15 +0700 | [diff] [blame] | 359 | test_expect_success 'shallow cloning single tag' ' |
| 360 | git clone --depth 1 --branch=TAGB1 "file://$(pwd)/." shallow7 && |
| 361 | cat >taglist.expected <<\EOF && |
| 362 | TAGB1 |
| 363 | TAGB2 |
| 364 | EOF |
| 365 | GIT_DIR=shallow7/.git git tag -l >taglist.actual && |
| 366 | test_cmp taglist.expected taglist.actual && |
| 367 | |
Nguyễn Thái Ngọc Duy | 682c7d2 | 2013-01-11 16:05:47 +0700 | [diff] [blame] | 368 | echo "in-pack: 4" > count7.expected && |
Nguyễn Thái Ngọc Duy | 5a7d5b6 | 2012-01-16 16:46:15 +0700 | [diff] [blame] | 369 | GIT_DIR=shallow7/.git git count-objects -v | |
| 370 | grep "^in-pack" > count7.actual && |
| 371 | test_cmp count7.expected count7.actual |
| 372 | ' |
| 373 | |
Jeff King | 06f15bf | 2013-03-16 06:27:01 -0400 | [diff] [blame] | 374 | test_expect_success 'clone shallow with packed refs' ' |
| 375 | git pack-refs --all && |
| 376 | git clone --depth 1 --branch A "file://$(pwd)/." shallow8 && |
| 377 | echo "in-pack: 4" > count8.expected && |
| 378 | GIT_DIR=shallow8/.git git count-objects -v | |
| 379 | grep "^in-pack" > count8.actual && |
| 380 | test_cmp count8.expected count8.actual |
| 381 | ' |
| 382 | |
Michael Heemskerk | 71d5f93 | 2013-05-03 00:56:07 +1000 | [diff] [blame] | 383 | test_expect_success 'fetch in shallow repo unreachable shallow objects' ' |
| 384 | ( |
| 385 | git clone --bare --branch B --single-branch "file://$(pwd)/." no-reflog && |
| 386 | git clone --depth 1 "file://$(pwd)/no-reflog" shallow9 && |
| 387 | cd no-reflog && |
| 388 | git tag -d TAGB1 TAGB2 && |
| 389 | git update-ref refs/heads/B B~~ && |
| 390 | git gc --prune=now && |
| 391 | cd ../shallow9 && |
| 392 | git fetch origin && |
| 393 | git fsck --no-dangling |
| 394 | ) |
| 395 | ' |
Matthijs Kooijman | f21d2a7 | 2013-08-28 18:02:02 +0200 | [diff] [blame] | 396 | test_expect_success 'fetch creating new shallow root' ' |
| 397 | ( |
| 398 | git clone "file://$(pwd)/." shallow10 && |
| 399 | git commit --allow-empty -m empty && |
| 400 | cd shallow10 && |
| 401 | git fetch --depth=1 --progress 2>actual && |
| 402 | # This should fetch only the empty commit, no tree or |
| 403 | # blob objects |
| 404 | grep "remote: Total 1" actual |
| 405 | ) |
| 406 | ' |
Michael Heemskerk | 71d5f93 | 2013-05-03 00:56:07 +1000 | [diff] [blame] | 407 | |
Ivan Todoroski | b2a9f4d | 2012-04-02 17:16:24 +0200 | [diff] [blame] | 408 | test_expect_success 'setup tests for the --stdin parameter' ' |
| 409 | for head in C D E F |
| 410 | do |
| 411 | add $head |
| 412 | done && |
| 413 | for head in A B C D E F |
| 414 | do |
| 415 | git tag $head $head |
| 416 | done && |
| 417 | cat >input <<-\EOF |
| 418 | refs/heads/C |
| 419 | refs/heads/A |
| 420 | refs/heads/D |
| 421 | refs/tags/C |
| 422 | refs/heads/B |
| 423 | refs/tags/A |
| 424 | refs/heads/E |
| 425 | refs/tags/B |
| 426 | refs/tags/E |
| 427 | refs/tags/D |
| 428 | EOF |
| 429 | sort <input >expect && |
| 430 | ( |
| 431 | echo refs/heads/E && |
| 432 | echo refs/tags/E && |
| 433 | cat input |
| 434 | ) >input.dup |
| 435 | ' |
| 436 | |
| 437 | test_expect_success 'fetch refs from cmdline' ' |
| 438 | ( |
| 439 | cd client && |
| 440 | git fetch-pack --no-progress .. $(cat ../input) |
| 441 | ) >output && |
| 442 | cut -d " " -f 2 <output | sort >actual && |
| 443 | test_cmp expect actual |
| 444 | ' |
| 445 | |
| 446 | test_expect_success 'fetch refs from stdin' ' |
| 447 | ( |
| 448 | cd client && |
| 449 | git fetch-pack --stdin --no-progress .. <../input |
| 450 | ) >output && |
| 451 | cut -d " " -f 2 <output | sort >actual && |
| 452 | test_cmp expect actual |
| 453 | ' |
| 454 | |
| 455 | test_expect_success 'fetch mixed refs from cmdline and stdin' ' |
| 456 | ( |
| 457 | cd client && |
| 458 | tail -n +5 ../input | |
| 459 | git fetch-pack --stdin --no-progress .. $(head -n 4 ../input) |
| 460 | ) >output && |
| 461 | cut -d " " -f 2 <output | sort >actual && |
| 462 | test_cmp expect actual |
| 463 | ' |
| 464 | |
| 465 | test_expect_success 'test duplicate refs from stdin' ' |
| 466 | ( |
| 467 | cd client && |
Michael Haggerty | 4c58f13 | 2012-09-09 08:19:42 +0200 | [diff] [blame] | 468 | git fetch-pack --stdin --no-progress .. <../input.dup |
Ivan Todoroski | b2a9f4d | 2012-04-02 17:16:24 +0200 | [diff] [blame] | 469 | ) >output && |
| 470 | cut -d " " -f 2 <output | sort >actual && |
| 471 | test_cmp expect actual |
| 472 | ' |
| 473 | |
Michael Haggerty | 3b08200 | 2012-09-09 08:19:36 +0200 | [diff] [blame] | 474 | test_expect_success 'set up tests of missing reference' ' |
| 475 | cat >expect-error <<-\EOF |
| 476 | error: no such remote ref refs/heads/xyzzy |
| 477 | EOF |
| 478 | ' |
| 479 | |
Michael Haggerty | 778e754 | 2012-09-09 08:19:47 +0200 | [diff] [blame] | 480 | test_expect_success 'test lonely missing ref' ' |
Michael Haggerty | 3b08200 | 2012-09-09 08:19:36 +0200 | [diff] [blame] | 481 | ( |
| 482 | cd client && |
| 483 | test_must_fail git fetch-pack --no-progress .. refs/heads/xyzzy |
| 484 | ) >/dev/null 2>error-m && |
| 485 | test_cmp expect-error error-m |
| 486 | ' |
| 487 | |
| 488 | test_expect_success 'test missing ref after existing' ' |
| 489 | ( |
| 490 | cd client && |
| 491 | test_must_fail git fetch-pack --no-progress .. refs/heads/A refs/heads/xyzzy |
| 492 | ) >/dev/null 2>error-em && |
| 493 | test_cmp expect-error error-em |
| 494 | ' |
| 495 | |
| 496 | test_expect_success 'test missing ref before existing' ' |
| 497 | ( |
| 498 | cd client && |
| 499 | test_must_fail git fetch-pack --no-progress .. refs/heads/xyzzy refs/heads/A |
| 500 | ) >/dev/null 2>error-me && |
| 501 | test_cmp expect-error error-me |
| 502 | ' |
| 503 | |
Michael Haggerty | 5f0fc64 | 2012-09-09 08:19:49 +0200 | [diff] [blame] | 504 | test_expect_success 'test --all, --depth, and explicit head' ' |
Michael Haggerty | 8db43d2 | 2012-09-09 08:19:37 +0200 | [diff] [blame] | 505 | ( |
| 506 | cd client && |
| 507 | git fetch-pack --no-progress --all --depth=1 .. refs/heads/A |
| 508 | ) >out-adh 2>error-adh |
| 509 | ' |
| 510 | |
Michael Haggerty | 5f0fc64 | 2012-09-09 08:19:49 +0200 | [diff] [blame] | 511 | test_expect_success 'test --all, --depth, and explicit tag' ' |
Michael Haggerty | 8db43d2 | 2012-09-09 08:19:37 +0200 | [diff] [blame] | 512 | git tag OLDTAG refs/heads/B~5 && |
| 513 | ( |
| 514 | cd client && |
| 515 | git fetch-pack --no-progress --all --depth=1 .. refs/tags/OLDTAG |
| 516 | ) >out-adt 2>error-adt |
| 517 | ' |
| 518 | |
Nguyễn Thái Ngọc Duy | 6da8bdc | 2013-08-26 09:17:26 +0700 | [diff] [blame] | 519 | test_expect_success 'shallow fetch with tags does not break the repository' ' |
| 520 | mkdir repo1 && |
| 521 | ( |
| 522 | cd repo1 && |
| 523 | git init && |
| 524 | test_commit 1 && |
| 525 | test_commit 2 && |
| 526 | test_commit 3 && |
| 527 | mkdir repo2 && |
| 528 | cd repo2 && |
| 529 | git init && |
| 530 | git fetch --depth=2 ../.git master:branch && |
| 531 | git fsck |
| 532 | ) |
| 533 | ' |
Torsten Bögershausen | 854aeb7 | 2013-11-28 20:49:29 +0100 | [diff] [blame] | 534 | check_prot_path () { |
| 535 | cat >expected <<-EOF && |
| 536 | Diag: url=$1 |
| 537 | Diag: protocol=$2 |
| 538 | Diag: path=$3 |
| 539 | EOF |
| 540 | git fetch-pack --diag-url "$1" | grep -v hostandport= >actual && |
| 541 | test_cmp expected actual |
| 542 | } |
| 543 | |
| 544 | check_prot_host_path () { |
| 545 | cat >expected <<-EOF && |
| 546 | Diag: url=$1 |
| 547 | Diag: protocol=$2 |
| 548 | Diag: hostandport=$3 |
| 549 | Diag: path=$4 |
| 550 | EOF |
| 551 | git fetch-pack --diag-url "$1" >actual && |
| 552 | test_cmp expected actual |
| 553 | } |
| 554 | |
| 555 | for r in repo re:po re/po |
| 556 | do |
| 557 | # git or ssh with scheme |
| 558 | for p in "ssh+git" "git+ssh" git ssh |
| 559 | do |
| 560 | for h in host host:12 [::1] [::1]:23 |
| 561 | do |
| 562 | case "$p" in |
| 563 | *ssh*) |
Torsten Bögershausen | 854aeb7 | 2013-11-28 20:49:29 +0100 | [diff] [blame] | 564 | pp=ssh |
| 565 | ;; |
| 566 | *) |
Torsten Bögershausen | 854aeb7 | 2013-11-28 20:49:29 +0100 | [diff] [blame] | 567 | pp=$p |
| 568 | ;; |
| 569 | esac |
| 570 | test_expect_success "fetch-pack --diag-url $p://$h/$r" ' |
Torsten Bögershausen | 83b0587 | 2013-11-28 20:49:54 +0100 | [diff] [blame] | 571 | check_prot_host_path $p://$h/$r $pp "$h" "/$r" |
Torsten Bögershausen | 854aeb7 | 2013-11-28 20:49:29 +0100 | [diff] [blame] | 572 | ' |
| 573 | # "/~" -> "~" conversion |
| 574 | test_expect_success "fetch-pack --diag-url $p://$h/~$r" ' |
Torsten Bögershausen | 83b0587 | 2013-11-28 20:49:54 +0100 | [diff] [blame] | 575 | check_prot_host_path $p://$h/~$r $pp "$h" "~$r" |
Torsten Bögershausen | 854aeb7 | 2013-11-28 20:49:29 +0100 | [diff] [blame] | 576 | ' |
| 577 | done |
| 578 | done |
| 579 | # file with scheme |
| 580 | for p in file |
| 581 | do |
| 582 | test_expect_success "fetch-pack --diag-url $p://$h/$r" ' |
| 583 | check_prot_path $p://$h/$r $p "/$r" |
| 584 | ' |
| 585 | # No "/~" -> "~" conversion for file |
| 586 | test_expect_success "fetch-pack --diag-url $p://$h/~$r" ' |
| 587 | check_prot_path $p://$h/~$r $p "/~$r" |
| 588 | ' |
| 589 | done |
Torsten Bögershausen | 6a59974 | 2013-11-28 20:49:38 +0100 | [diff] [blame] | 590 | # file without scheme |
| 591 | for h in nohost nohost:12 [::1] [::1]:23 [ [:aa |
| 592 | do |
| 593 | test_expect_success "fetch-pack --diag-url ./$h:$r" ' |
| 594 | check_prot_path ./$h:$r $p "./$h:$r" |
| 595 | ' |
| 596 | # No "/~" -> "~" conversion for file |
| 597 | test_expect_success "fetch-pack --diag-url ./$p:$h/~$r" ' |
| 598 | check_prot_path ./$p:$h/~$r $p "./$p:$h/~$r" |
| 599 | ' |
| 600 | done |
| 601 | #ssh without scheme |
| 602 | p=ssh |
| 603 | for h in host [::1] |
| 604 | do |
Torsten Bögershausen | 6a59974 | 2013-11-28 20:49:38 +0100 | [diff] [blame] | 605 | test_expect_success "fetch-pack --diag-url $h:$r" ' |
| 606 | check_prot_path $h:$r $p "$r" |
| 607 | ' |
| 608 | # Do "/~" -> "~" conversion |
| 609 | test_expect_success "fetch-pack --diag-url $h:/~$r" ' |
Torsten Bögershausen | 83b0587 | 2013-11-28 20:49:54 +0100 | [diff] [blame] | 610 | check_prot_host_path $h:/~$r $p "$h" "~$r" |
Torsten Bögershausen | 6a59974 | 2013-11-28 20:49:38 +0100 | [diff] [blame] | 611 | ' |
| 612 | done |
Torsten Bögershausen | 854aeb7 | 2013-11-28 20:49:29 +0100 | [diff] [blame] | 613 | done |
Nguyễn Thái Ngọc Duy | 6da8bdc | 2013-08-26 09:17:26 +0700 | [diff] [blame] | 614 | |
Torsten Bögershausen | c59ab2e | 2013-11-28 20:50:03 +0100 | [diff] [blame] | 615 | test_expect_success MINGW 'fetch-pack --diag-url file://c:/repo' ' |
| 616 | check_prot_path file://c:/repo file c:/repo |
| 617 | ' |
| 618 | test_expect_success MINGW 'fetch-pack --diag-url c:repo' ' |
| 619 | check_prot_path c:repo file c:repo |
| 620 | ' |
| 621 | |
Johannes Schindelin | 6b17c67 | 2005-10-28 04:47:38 +0200 | [diff] [blame] | 622 | test_done |