Merge branch 'maint-1.5.4' into maint-1.5.5
[git/spearce.git] / t / t5700-clone-reference.sh
blobb6a54867b491ba67e4813fd492a1a8cc16959a21
1 #!/bin/sh
3 # Copyright (C) 2006 Martin Waitz <tali@admingilde.org>
6 test_description='test clone --reference'
7 . ./test-lib.sh
9 base_dir=`pwd`
11 test_expect_success 'preparing first repository' \
12 'test_create_repo A && cd A &&
13 echo first > file1 &&
14 git add file1 &&
15 git commit -m initial'
17 cd "$base_dir"
19 test_expect_success 'preparing second repository' \
20 'git clone A B && cd B &&
21 echo second > file2 &&
22 git add file2 &&
23 git commit -m addition &&
24 git repack -a -d &&
25 git prune'
27 cd "$base_dir"
29 test_expect_success 'cloning with reference (-l -s)' \
30 'git clone -l -s --reference B A C'
32 cd "$base_dir"
34 test_expect_success 'existence of info/alternates' \
35 'test `wc -l <C/.git/objects/info/alternates` = 2'
37 cd "$base_dir"
39 test_expect_success 'pulling from reference' \
40 'cd C &&
41 git pull ../B master'
43 cd "$base_dir"
45 test_expect_success 'that reference gets used' \
46 'cd C &&
47 echo "0 objects, 0 kilobytes" > expected &&
48 git count-objects > current &&
49 diff expected current'
51 cd "$base_dir"
53 test_expect_success 'cloning with reference (no -l -s)' \
54 'git clone --reference B file://`pwd`/A D'
56 cd "$base_dir"
58 test_expect_success 'existence of info/alternates' \
59 'test `wc -l <D/.git/objects/info/alternates` = 1'
61 cd "$base_dir"
63 test_expect_success 'pulling from reference' \
64 'cd D && git pull ../B master'
66 cd "$base_dir"
68 test_expect_success 'that reference gets used' \
69 'cd D && echo "0 objects, 0 kilobytes" > expected &&
70 git count-objects > current &&
71 diff expected current'
73 cd "$base_dir"
75 test_expect_success 'updating origin' \
76 'cd A &&
77 echo third > file3 &&
78 git add file3 &&
79 git commit -m update &&
80 git repack -a -d &&
81 git prune'
83 cd "$base_dir"
85 test_expect_success 'pulling changes from origin' \
86 'cd C &&
87 git pull origin'
89 cd "$base_dir"
91 # the 2 local objects are commit and tree from the merge
92 test_expect_success 'that alternate to origin gets used' \
93 'cd C &&
94 echo "2 objects" > expected &&
95 git count-objects | cut -d, -f1 > current &&
96 diff expected current'
98 cd "$base_dir"
100 test_expect_success 'pulling changes from origin' \
101 'cd D &&
102 git pull origin'
104 cd "$base_dir"
106 # the 5 local objects are expected; file3 blob, commit in A to add it
107 # and its tree, and 2 are our tree and the merge commit.
108 test_expect_success 'check objects expected to exist locally' \
109 'cd D &&
110 echo "5 objects" > expected &&
111 git count-objects | cut -d, -f1 > current &&
112 diff expected current'
114 cd "$base_dir"
116 test_done