On Wed, May 22, 2019 at 12:53:27PM -0700, Derrick Stolee via GitGitGadget wrote:
> diff --git a/t/t5323-split-commit-graph.sh b/t/t5323-split-commit-graph.sh
> new file mode 100755
> index 0000000000..96704b9f5b
> --- /dev/null
> +++ b/t/t5323-split-commit-graph.sh
> @@ -0,0 +1,122 @@
> +#!/bin/sh
> +
> +test_description='split commit graph'
> +. ./test-lib.sh
> +
> +GIT_TEST_COMMIT_GRAPH=0
> +
> +test_expect_success 'setup repo' '
> + git init &&
> + git config core.commitGraph true &&
> + infodir=".git/objects/info" &&
> + graphdir="$infodir/commit-graphs" &&
> + test_oid_init
> +'
> +
> +graph_read_expect() {
> + NUM_BASE=0
> + if test ! -z $2
> + then
> + NUM_BASE=$2
> + fi
> + cat >expect <<- EOF
> + header: 43475048 1 1 3 $NUM_BASE
> + num_commits: $1
> + chunks: oid_fanout oid_lookup commit_metadata
> + EOF
> + git commit-graph read >output &&
> + test_cmp expect output
> +}
> +
> +test_expect_success 'create commits and write commit-graph' '
> + for i in $(test_seq 3)
> + do
> + test_commit $i &&
> + git branch commits/$i
> + done &&
Please add a "|| return 1" at the end of the for loop's body, i.e.
for ....
do
this &&
that || return 1
done
because for loops continue iteration even when the commands in their
body failed, potentially hinding errors.
This applies to the other three for loops below as well.
> + git commit-graph write --reachable &&
> + test_path_is_file $infodir/commit-graph &&
> + graph_read_expect 3
> +'
> +
> +graph_git_two_modes() {
> + git -c core.commitGraph=true $1 >output
> + git -c core.commitGraph=false $1 >expect
> + test_cmp expect output
> +}
> +
> +graph_git_behavior() {
> + MSG=$1
> + BRANCH=$2
> + COMPARE=$3
> + test_expect_success "check normal git operations: $MSG" '
> + graph_git_two_modes "log --oneline $BRANCH" &&
> + graph_git_two_modes "log --topo-order $BRANCH" &&
> + graph_git_two_modes "log --graph $COMPARE..$BRANCH" &&
> + graph_git_two_modes "branch -vv" &&
> + graph_git_two_modes "merge-base -a $BRANCH $COMPARE"
> + '
> +}
> +
> +graph_git_behavior 'graph exists' commits/3 commits/1
> +
> +verify_chain_files_exist() {
> + for hash in $(cat $1/commit-graph-chain)
> + do
> + test_path_is_file $1/graph-$hash.graph
> + done
> +}
> +
> +test_expect_success 'add more commits, and write a new base graph' '
> + git reset --hard commits/1 &&
> + for i in $(test_seq 4 5)
> + do
> + test_commit $i &&
> + git branch commits/$i
> + done &&
> + git reset --hard commits/2 &&
> + for i in $(test_seq 6 10)
> + do
> + test_commit $i &&
> + git branch commits/$i
> + done &&
> + git reset --hard commits/2 &&
> + git merge commits/4 &&
> + git branch merge/1 &&
> + git reset --hard commits/4 &&
> + git merge commits/6 &&
> + git branch merge/2 &&
> + git commit-graph write --reachable &&
> + graph_read_expect 12
> +'
> +
> +test_expect_success 'add three more commits, write a tip graph' '
> + git reset --hard commits/3 &&
> + git merge merge/1 &&
> + git merge commits/5 &&
> + git merge merge/2 &&
> + git branch merge/3 &&
> + git commit-graph write --reachable --split &&
> + test_path_is_missing $infodir/commit-graph &&
> + test_path_is_file $graphdir/commit-graph-chain &&
> + ls $graphdir/graph-*.graph >graph-files &&
> + test_line_count = 2 graph-files &&
> + verify_chain_files_exist $graphdir
> +'
> +
> +graph_git_behavior 'split commit-graph: merge 3 vs 2' merge/3 merge/2
> +
> +test_expect_success 'add one commit, write a tip graph' '
> + test_commit 11 &&
> + git branch commits/11 &&
> + git commit-graph write --reachable --split &&
> + test_path_is_missing $infodir/commit-graph &&
> + test_path_is_file $graphdir/commit-graph-chain &&
> + ls $graphdir/graph-*.graph >graph-files &&
> + test_line_count = 3 graph-files &&
> + verify_chain_files_exist $graphdir
> +'
> +
> +graph_git_behavior 'three-layer commit-graph: commit 11 vs 6' commits/11
> commits/6
> +
> +test_done
> --
> gitgitgadget
>