Commit | Line | Data |
---|---|---|
135a7123 DS |
1 | #!/bin/sh |
2 | ||
3 | test_description='split commit graph' | |
4 | . ./test-lib.sh | |
5 | ||
6 | GIT_TEST_COMMIT_GRAPH=0 | |
7 | ||
8 | test_expect_success 'setup repo' ' | |
9 | git init && | |
10 | git config core.commitGraph true && | |
11 | infodir=".git/objects/info" && | |
12 | graphdir="$infodir/commit-graphs" && | |
13 | test_oid_init | |
14 | ' | |
15 | ||
16 | graph_read_expect() { | |
17 | NUM_BASE=0 | |
18 | if test ! -z $2 | |
19 | then | |
20 | NUM_BASE=$2 | |
21 | fi | |
22 | cat >expect <<- EOF | |
23 | header: 43475048 1 1 3 $NUM_BASE | |
24 | num_commits: $1 | |
25 | chunks: oid_fanout oid_lookup commit_metadata | |
26 | EOF | |
27 | git commit-graph read >output && | |
28 | test_cmp expect output | |
29 | } | |
30 | ||
31 | test_expect_success 'create commits and write commit-graph' ' | |
32 | for i in $(test_seq 3) | |
33 | do | |
34 | test_commit $i && | |
35 | git branch commits/$i || return 1 | |
36 | done && | |
37 | git commit-graph write --reachable && | |
38 | test_path_is_file $infodir/commit-graph && | |
39 | graph_read_expect 3 | |
40 | ' | |
41 | ||
42 | graph_git_two_modes() { | |
43 | git -c core.commitGraph=true $1 >output | |
44 | git -c core.commitGraph=false $1 >expect | |
45 | test_cmp expect output | |
46 | } | |
47 | ||
48 | graph_git_behavior() { | |
49 | MSG=$1 | |
50 | BRANCH=$2 | |
51 | COMPARE=$3 | |
52 | test_expect_success "check normal git operations: $MSG" ' | |
53 | graph_git_two_modes "log --oneline $BRANCH" && | |
54 | graph_git_two_modes "log --topo-order $BRANCH" && | |
55 | graph_git_two_modes "log --graph $COMPARE..$BRANCH" && | |
56 | graph_git_two_modes "branch -vv" && | |
57 | graph_git_two_modes "merge-base -a $BRANCH $COMPARE" | |
58 | ' | |
59 | } | |
60 | ||
61 | graph_git_behavior 'graph exists' commits/3 commits/1 | |
62 | ||
63 | verify_chain_files_exist() { | |
64 | for hash in $(cat $1/commit-graph-chain) | |
65 | do | |
66 | test_path_is_file $1/graph-$hash.graph || return 1 | |
67 | done | |
68 | } | |
69 | ||
70 | test_expect_success 'add more commits, and write a new base graph' ' | |
71 | git reset --hard commits/1 && | |
72 | for i in $(test_seq 4 5) | |
73 | do | |
74 | test_commit $i && | |
75 | git branch commits/$i || return 1 | |
76 | done && | |
77 | git reset --hard commits/2 && | |
78 | for i in $(test_seq 6 10) | |
79 | do | |
80 | test_commit $i && | |
81 | git branch commits/$i || return 1 | |
82 | done && | |
83 | git reset --hard commits/2 && | |
84 | git merge commits/4 && | |
85 | git branch merge/1 && | |
86 | git reset --hard commits/4 && | |
87 | git merge commits/6 && | |
88 | git branch merge/2 && | |
89 | git commit-graph write --reachable && | |
90 | graph_read_expect 12 | |
91 | ' | |
92 | ||
93 | test_expect_success 'add three more commits, write a tip graph' ' | |
94 | git reset --hard commits/3 && | |
95 | git merge merge/1 && | |
96 | git merge commits/5 && | |
97 | git merge merge/2 && | |
98 | git branch merge/3 && | |
99 | git commit-graph write --reachable --split && | |
100 | test_path_is_missing $infodir/commit-graph && | |
101 | test_path_is_file $graphdir/commit-graph-chain && | |
102 | ls $graphdir/graph-*.graph >graph-files && | |
103 | test_line_count = 2 graph-files && | |
104 | verify_chain_files_exist $graphdir | |
105 | ' | |
106 | ||
107 | graph_git_behavior 'split commit-graph: merge 3 vs 2' merge/3 merge/2 | |
108 | ||
109 | test_expect_success 'add one commit, write a tip graph' ' | |
110 | test_commit 11 && | |
111 | git branch commits/11 && | |
112 | git commit-graph write --reachable --split && | |
113 | test_path_is_missing $infodir/commit-graph && | |
114 | test_path_is_file $graphdir/commit-graph-chain && | |
115 | ls $graphdir/graph-*.graph >graph-files && | |
116 | test_line_count = 3 graph-files && | |
117 | verify_chain_files_exist $graphdir | |
118 | ' | |
119 | ||
120 | graph_git_behavior 'three-layer commit-graph: commit 11 vs 6' commits/11 commits/6 | |
121 | ||
1771be90 DS |
122 | test_expect_success 'add one commit, write a merged graph' ' |
123 | test_commit 12 && | |
124 | git branch commits/12 && | |
125 | git commit-graph write --reachable --split && | |
126 | test_path_is_file $graphdir/commit-graph-chain && | |
127 | test_line_count = 2 $graphdir/commit-graph-chain && | |
128 | ls $graphdir/graph-*.graph >graph-files && | |
129 | test_line_count = 4 graph-files && | |
130 | verify_chain_files_exist $graphdir | |
131 | ' | |
132 | ||
133 | graph_git_behavior 'merged commit-graph: commit 12 vs 6' commits/12 commits/6 | |
134 | ||
135a7123 | 135 | test_done |