]>
Commit | Line | Data |
---|---|---|
f237c8b6 DS |
1 | #!/bin/sh |
2 | ||
3 | test_description='commit graph' | |
4 | . ./test-lib.sh | |
5 | ||
6 | test_expect_success 'setup full repo' ' | |
7 | mkdir full && | |
8 | cd "$TRASH_DIRECTORY/full" && | |
9 | git init && | |
177722b3 | 10 | git config core.commitGraph true && |
f237c8b6 DS |
11 | objdir=".git/objects" |
12 | ' | |
13 | ||
14 | test_expect_success 'write graph with no packs' ' | |
15 | cd "$TRASH_DIRECTORY/full" && | |
16 | git commit-graph write --object-dir . && | |
17 | test_path_is_file info/commit-graph | |
18 | ' | |
19 | ||
20 | test_expect_success 'create commits and repack' ' | |
21 | cd "$TRASH_DIRECTORY/full" && | |
22 | for i in $(test_seq 3) | |
23 | do | |
24 | test_commit $i && | |
25 | git branch commits/$i | |
26 | done && | |
27 | git repack | |
28 | ' | |
29 | ||
177722b3 DS |
30 | graph_git_two_modes() { |
31 | git -c core.graph=true $1 >output | |
32 | git -c core.graph=false $1 >expect | |
33 | test_cmp output expect | |
34 | } | |
35 | ||
36 | graph_git_behavior() { | |
37 | MSG=$1 | |
38 | DIR=$2 | |
39 | BRANCH=$3 | |
40 | COMPARE=$4 | |
41 | test_expect_success "check normal git operations: $MSG" ' | |
42 | cd "$TRASH_DIRECTORY/$DIR" && | |
43 | graph_git_two_modes "log --oneline $BRANCH" && | |
44 | graph_git_two_modes "log --topo-order $BRANCH" && | |
45 | graph_git_two_modes "log --graph $COMPARE..$BRANCH" && | |
46 | graph_git_two_modes "branch -vv" && | |
47 | graph_git_two_modes "merge-base -a $BRANCH $COMPARE" | |
48 | ' | |
49 | } | |
50 | ||
51 | graph_git_behavior 'no graph' full commits/3 commits/1 | |
52 | ||
2a2e32bd DS |
53 | graph_read_expect() { |
54 | OPTIONAL="" | |
55 | NUM_CHUNKS=3 | |
56 | if test ! -z $2 | |
57 | then | |
58 | OPTIONAL=" $2" | |
59 | NUM_CHUNKS=$((3 + $(echo "$2" | wc -w))) | |
60 | fi | |
61 | cat >expect <<- EOF | |
62 | header: 43475048 1 1 $NUM_CHUNKS 0 | |
63 | num_commits: $1 | |
64 | chunks: oid_fanout oid_lookup commit_metadata$OPTIONAL | |
65 | EOF | |
66 | git commit-graph read >output && | |
67 | test_cmp expect output | |
68 | } | |
69 | ||
f237c8b6 DS |
70 | test_expect_success 'write graph' ' |
71 | cd "$TRASH_DIRECTORY/full" && | |
72 | graph1=$(git commit-graph write) && | |
2a2e32bd DS |
73 | test_path_is_file $objdir/info/commit-graph && |
74 | graph_read_expect "3" | |
f237c8b6 DS |
75 | ' |
76 | ||
177722b3 DS |
77 | graph_git_behavior 'graph exists' full commits/3 commits/1 |
78 | ||
f237c8b6 DS |
79 | test_expect_success 'Add more commits' ' |
80 | cd "$TRASH_DIRECTORY/full" && | |
81 | git reset --hard commits/1 && | |
82 | for i in $(test_seq 4 5) | |
83 | do | |
84 | test_commit $i && | |
85 | git branch commits/$i | |
86 | done && | |
87 | git reset --hard commits/2 && | |
88 | for i in $(test_seq 6 7) | |
89 | do | |
90 | test_commit $i && | |
91 | git branch commits/$i | |
92 | done && | |
93 | git reset --hard commits/2 && | |
94 | git merge commits/4 && | |
95 | git branch merge/1 && | |
96 | git reset --hard commits/4 && | |
97 | git merge commits/6 && | |
98 | git branch merge/2 && | |
99 | git reset --hard commits/3 && | |
100 | git merge commits/5 commits/7 && | |
101 | git branch merge/3 && | |
102 | git repack | |
103 | ' | |
104 | ||
105 | # Current graph structure: | |
106 | # | |
107 | # __M3___ | |
108 | # / | \ | |
109 | # 3 M1 5 M2 7 | |
110 | # |/ \|/ \| | |
111 | # 2 4 6 | |
112 | # |___/____/ | |
113 | # 1 | |
114 | ||
f237c8b6 DS |
115 | test_expect_success 'write graph with merges' ' |
116 | cd "$TRASH_DIRECTORY/full" && | |
117 | git commit-graph write && | |
2a2e32bd DS |
118 | test_path_is_file $objdir/info/commit-graph && |
119 | graph_read_expect "10" "large_edges" | |
f237c8b6 DS |
120 | ' |
121 | ||
177722b3 DS |
122 | graph_git_behavior 'merge 1 vs 2' full merge/1 merge/2 |
123 | graph_git_behavior 'merge 1 vs 3' full merge/1 merge/3 | |
124 | graph_git_behavior 'merge 2 vs 3' full merge/2 merge/3 | |
125 | ||
f237c8b6 DS |
126 | test_expect_success 'Add one more commit' ' |
127 | cd "$TRASH_DIRECTORY/full" && | |
128 | test_commit 8 && | |
129 | git branch commits/8 && | |
130 | ls $objdir/pack | grep idx >existing-idx && | |
131 | git repack && | |
132 | ls $objdir/pack| grep idx | grep -v --file=existing-idx >new-idx | |
133 | ' | |
134 | ||
135 | # Current graph structure: | |
136 | # | |
137 | # 8 | |
138 | # | | |
139 | # __M3___ | |
140 | # / | \ | |
141 | # 3 M1 5 M2 7 | |
142 | # |/ \|/ \| | |
143 | # 2 4 6 | |
144 | # |___/____/ | |
145 | # 1 | |
146 | ||
177722b3 DS |
147 | graph_git_behavior 'mixed mode, commit 8 vs merge 1' full commits/8 merge/1 |
148 | graph_git_behavior 'mixed mode, commit 8 vs merge 2' full commits/8 merge/2 | |
149 | ||
f237c8b6 DS |
150 | test_expect_success 'write graph with new commit' ' |
151 | cd "$TRASH_DIRECTORY/full" && | |
152 | git commit-graph write && | |
2a2e32bd DS |
153 | test_path_is_file $objdir/info/commit-graph && |
154 | graph_read_expect "11" "large_edges" | |
f237c8b6 DS |
155 | ' |
156 | ||
177722b3 DS |
157 | graph_git_behavior 'full graph, commit 8 vs merge 1' full commits/8 merge/1 |
158 | graph_git_behavior 'full graph, commit 8 vs merge 2' full commits/8 merge/2 | |
159 | ||
f237c8b6 DS |
160 | test_expect_success 'write graph with nothing new' ' |
161 | cd "$TRASH_DIRECTORY/full" && | |
162 | git commit-graph write && | |
2a2e32bd DS |
163 | test_path_is_file $objdir/info/commit-graph && |
164 | graph_read_expect "11" "large_edges" | |
f237c8b6 DS |
165 | ' |
166 | ||
177722b3 DS |
167 | graph_git_behavior 'cleared graph, commit 8 vs merge 1' full commits/8 merge/1 |
168 | graph_git_behavior 'cleared graph, commit 8 vs merge 2' full commits/8 merge/2 | |
169 | ||
049d51a2 DS |
170 | test_expect_success 'build graph from latest pack with closure' ' |
171 | cd "$TRASH_DIRECTORY/full" && | |
172 | cat new-idx | git commit-graph write --stdin-packs && | |
173 | test_path_is_file $objdir/info/commit-graph && | |
174 | graph_read_expect "9" "large_edges" | |
175 | ' | |
176 | ||
177 | graph_git_behavior 'graph from pack, commit 8 vs merge 1' full commits/8 merge/1 | |
178 | graph_git_behavior 'graph from pack, commit 8 vs merge 2' full commits/8 merge/2 | |
179 | ||
3d5df01b DS |
180 | test_expect_success 'build graph from commits with closure' ' |
181 | cd "$TRASH_DIRECTORY/full" && | |
182 | git tag -a -m "merge" tag/merge merge/2 && | |
183 | git rev-parse tag/merge >commits-in && | |
184 | git rev-parse merge/1 >>commits-in && | |
185 | cat commits-in | git commit-graph write --stdin-commits && | |
186 | test_path_is_file $objdir/info/commit-graph && | |
187 | graph_read_expect "6" | |
188 | ' | |
189 | ||
190 | graph_git_behavior 'graph from commits, commit 8 vs merge 1' full commits/8 merge/1 | |
191 | graph_git_behavior 'graph from commits, commit 8 vs merge 2' full commits/8 merge/2 | |
192 | ||
7547b95b DS |
193 | test_expect_success 'build graph from commits with append' ' |
194 | cd "$TRASH_DIRECTORY/full" && | |
195 | git rev-parse merge/3 | git commit-graph write --stdin-commits --append && | |
196 | test_path_is_file $objdir/info/commit-graph && | |
197 | graph_read_expect "10" "large_edges" | |
198 | ' | |
199 | ||
200 | graph_git_behavior 'append graph, commit 8 vs merge 1' full commits/8 merge/1 | |
201 | graph_git_behavior 'append graph, commit 8 vs merge 2' full commits/8 merge/2 | |
202 | ||
f237c8b6 DS |
203 | test_expect_success 'setup bare repo' ' |
204 | cd "$TRASH_DIRECTORY" && | |
205 | git clone --bare --no-local full bare && | |
206 | cd bare && | |
177722b3 | 207 | git config core.commitGraph true && |
f237c8b6 DS |
208 | baredir="./objects" |
209 | ' | |
210 | ||
177722b3 DS |
211 | graph_git_behavior 'bare repo, commit 8 vs merge 1' bare commits/8 merge/1 |
212 | graph_git_behavior 'bare repo, commit 8 vs merge 2' bare commits/8 merge/2 | |
213 | ||
f237c8b6 DS |
214 | test_expect_success 'write graph in bare repo' ' |
215 | cd "$TRASH_DIRECTORY/bare" && | |
216 | git commit-graph write && | |
2a2e32bd DS |
217 | test_path_is_file $baredir/info/commit-graph && |
218 | graph_read_expect "11" "large_edges" | |
f237c8b6 DS |
219 | ' |
220 | ||
177722b3 DS |
221 | graph_git_behavior 'bare repo with graph, commit 8 vs merge 1' bare commits/8 merge/1 |
222 | graph_git_behavior 'bare repo with graph, commit 8 vs merge 2' bare commits/8 merge/2 | |
223 | ||
f237c8b6 | 224 | test_done |