30aef6498af9e76abac668aad99e92f7105b26a6
1#!/bin/sh
2
3test_description='pack-objects object selection using sparse algorithm'
4. ./test-lib.sh
5
6test_expect_success 'setup repo' '
7 test_commit initial &&
8 for i in $(test_seq 1 3)
9 do
10 mkdir f$i &&
11 for j in $(test_seq 1 3)
12 do
13 mkdir f$i/f$j &&
14 echo $j >f$i/f$j/data.txt
15 done
16 done &&
17 git add . &&
18 git commit -m "Initialized trees" &&
19 for i in $(test_seq 1 3)
20 do
21 git checkout -b topic$i master &&
22 echo change-$i >f$i/f$i/data.txt &&
23 git commit -a -m "Changed f$i/f$i/data.txt"
24 done &&
25 cat >packinput.txt <<-EOF &&
26 topic1
27 ^topic2
28 ^topic3
29 EOF
30 git rev-parse \
31 topic1 \
32 topic1^{tree} \
33 topic1:f1 \
34 topic1:f1/f1 \
35 topic1:f1/f1/data.txt | sort >expect_objects.txt
36'
37
38test_expect_success 'non-sparse pack-objects' '
39 git pack-objects --stdout --revs <packinput.txt >nonsparse.pack &&
40 git index-pack -o nonsparse.idx nonsparse.pack &&
41 git show-index <nonsparse.idx | awk "{print \$2}" >nonsparse_objects.txt &&
42 test_cmp expect_objects.txt nonsparse_objects.txt
43'
44
45test_expect_success 'sparse pack-objects' '
46 git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack &&
47 git index-pack -o sparse.idx sparse.pack &&
48 git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
49 test_cmp expect_objects.txt sparse_objects.txt
50'
51
52test_expect_success 'duplicate a folder from f3 and commit to topic1' '
53 git checkout topic1 &&
54 echo change-3 >f3/f3/data.txt &&
55 git commit -a -m "Changed f3/f3/data.txt" &&
56 git rev-parse \
57 topic1~1 \
58 topic1~1^{tree} \
59 topic1^{tree} \
60 topic1 \
61 topic1:f1 \
62 topic1:f1/f1 \
63 topic1:f1/f1/data.txt | sort >required_objects.txt
64'
65
66test_expect_success 'non-sparse pack-objects' '
67 git pack-objects --stdout --revs <packinput.txt >nonsparse.pack &&
68 git index-pack -o nonsparse.idx nonsparse.pack &&
69 git show-index <nonsparse.idx | awk "{print \$2}" >nonsparse_objects.txt &&
70 comm -1 -2 required_objects.txt nonsparse_objects.txt >nonsparse_required_objects.txt &&
71 test_cmp required_objects.txt nonsparse_required_objects.txt
72'
73
74test_expect_success 'sparse pack-objects' '
75 git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack &&
76 git index-pack -o sparse.idx sparse.pack &&
77 git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
78 comm -1 -2 required_objects.txt sparse_objects.txt >sparse_required_objects.txt &&
79 test_cmp required_objects.txt sparse_required_objects.txt
80'
81
82test_expect_success 'duplicate a folder from f1 into f3' '
83 mkdir f3/f4 &&
84 cp -r f1/f1/* f3/f4 &&
85 git add f3/f4 &&
86 git commit -m "Copied f1/f1 to f3/f4" &&
87 cat >packinput.txt <<-EOF &&
88 topic1
89 ^topic1~1
90 EOF
91 git rev-parse \
92 topic1 \
93 topic1^{tree} \
94 topic1:f3 | sort >required_objects.txt
95'
96
97test_expect_success 'non-sparse pack-objects' '
98 git pack-objects --stdout --revs <packinput.txt >nonsparse.pack &&
99 git index-pack -o nonsparse.idx nonsparse.pack &&
100 git show-index <nonsparse.idx | awk "{print \$2}" >nonsparse_objects.txt &&
101 comm -1 -2 required_objects.txt nonsparse_objects.txt >nonsparse_required_objects.txt &&
102 test_cmp required_objects.txt nonsparse_required_objects.txt
103'
104
105test_expect_success 'sparse pack-objects' '
106 git pack-objects --stdout --revs --sparse <packinput.txt >sparse.pack &&
107 git index-pack -o sparse.idx sparse.pack &&
108 git show-index <sparse.idx | awk "{print \$2}" >sparse_objects.txt &&
109 comm -1 -2 required_objects.txt sparse_objects.txt >sparse_required_objects.txt &&
110 test_cmp required_objects.txt sparse_required_objects.txt
111'
112
113test_done