| #!/bin/sh |
| |
| test_description='commit graph' |
| . ./test-lib.sh |
| |
| test_expect_success 'setup full repo' ' |
| mkdir full && |
| cd "$TRASH_DIRECTORY/full" && |
| git init && |
| objdir=".git/objects" |
| ' |
| |
| test_expect_success 'write graph with no packs' ' |
| cd "$TRASH_DIRECTORY/full" && |
| git commit-graph write --object-dir . && |
| test_path_is_file info/commit-graph |
| ' |
| |
| test_expect_success 'create commits and repack' ' |
| cd "$TRASH_DIRECTORY/full" && |
| for i in $(test_seq 3) |
| do |
| test_commit $i && |
| git branch commits/$i |
| done && |
| git repack |
| ' |
| |
| graph_read_expect() { |
| OPTIONAL="" |
| NUM_CHUNKS=3 |
| if test ! -z $2 |
| then |
| OPTIONAL=" $2" |
| NUM_CHUNKS=$((3 + $(echo "$2" | wc -w))) |
| fi |
| cat >expect <<- EOF |
| header: 43475048 1 1 $NUM_CHUNKS 0 |
| num_commits: $1 |
| chunks: oid_fanout oid_lookup commit_metadata$OPTIONAL |
| EOF |
| git commit-graph read >output && |
| test_cmp expect output |
| } |
| |
| test_expect_success 'write graph' ' |
| cd "$TRASH_DIRECTORY/full" && |
| graph1=$(git commit-graph write) && |
| test_path_is_file $objdir/info/commit-graph && |
| graph_read_expect "3" |
| ' |
| |
| test_expect_success 'Add more commits' ' |
| cd "$TRASH_DIRECTORY/full" && |
| 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 7) |
| 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 reset --hard commits/3 && |
| git merge commits/5 commits/7 && |
| git branch merge/3 && |
| git repack |
| ' |
| |
| # Current graph structure: |
| # |
| # __M3___ |
| # / | \ |
| # 3 M1 5 M2 7 |
| # |/ \|/ \| |
| # 2 4 6 |
| # |___/____/ |
| # 1 |
| |
| |
| test_expect_success 'write graph with merges' ' |
| cd "$TRASH_DIRECTORY/full" && |
| git commit-graph write && |
| test_path_is_file $objdir/info/commit-graph && |
| graph_read_expect "10" "large_edges" |
| ' |
| |
| test_expect_success 'Add one more commit' ' |
| cd "$TRASH_DIRECTORY/full" && |
| test_commit 8 && |
| git branch commits/8 && |
| ls $objdir/pack | grep idx >existing-idx && |
| git repack && |
| ls $objdir/pack| grep idx | grep -v --file=existing-idx >new-idx |
| ' |
| |
| # Current graph structure: |
| # |
| # 8 |
| # | |
| # __M3___ |
| # / | \ |
| # 3 M1 5 M2 7 |
| # |/ \|/ \| |
| # 2 4 6 |
| # |___/____/ |
| # 1 |
| |
| test_expect_success 'write graph with new commit' ' |
| cd "$TRASH_DIRECTORY/full" && |
| git commit-graph write && |
| test_path_is_file $objdir/info/commit-graph && |
| graph_read_expect "11" "large_edges" |
| ' |
| |
| test_expect_success 'write graph with nothing new' ' |
| cd "$TRASH_DIRECTORY/full" && |
| git commit-graph write && |
| test_path_is_file $objdir/info/commit-graph && |
| graph_read_expect "11" "large_edges" |
| ' |
| |
| test_expect_success 'setup bare repo' ' |
| cd "$TRASH_DIRECTORY" && |
| git clone --bare --no-local full bare && |
| cd bare && |
| baredir="./objects" |
| ' |
| |
| test_expect_success 'write graph in bare repo' ' |
| cd "$TRASH_DIRECTORY/bare" && |
| git commit-graph write && |
| test_path_is_file $baredir/info/commit-graph && |
| graph_read_expect "11" "large_edges" |
| ' |
| |
| test_done |