| #!/bin/sh |
| |
| test_description='test git repo structure' |
| |
| . ./test-lib.sh |
| |
| object_type_disk_usage() { |
| disk_usage_opt="--disk-usage" |
| |
| if test "$2" = "true" |
| then |
| disk_usage_opt="--disk-usage=human" |
| fi |
| |
| if test "$1" = "all" |
| then |
| git rev-list --all --objects $disk_usage_opt |
| else |
| git rev-list --all --objects $disk_usage_opt \ |
| --filter=object:type=$1 --filter-provided-objects |
| fi |
| } |
| |
| test_expect_success 'empty repository' ' |
| test_when_finished "rm -rf repo" && |
| git init repo && |
| ( |
| cd repo && |
| cat >expect <<-\EOF && |
| | Repository structure | Value | |
| | -------------------- | ------ | |
| | * References | | |
| | * Count | 0 | |
| | * Branches | 0 | |
| | * Tags | 0 | |
| | * Remotes | 0 | |
| | * Others | 0 | |
| | | | |
| | * Reachable objects | | |
| | * Count | 0 | |
| | * Commits | 0 | |
| | * Trees | 0 | |
| | * Blobs | 0 | |
| | * Tags | 0 | |
| | * Inflated size | 0 B | |
| | * Commits | 0 B | |
| | * Trees | 0 B | |
| | * Blobs | 0 B | |
| | * Tags | 0 B | |
| | * Disk size | 0 B | |
| | * Commits | 0 B | |
| | * Trees | 0 B | |
| | * Blobs | 0 B | |
| | * Tags | 0 B | |
| EOF |
| |
| git repo structure >out 2>err && |
| |
| test_cmp expect out && |
| test_line_count = 0 err |
| ) |
| ' |
| |
| test_expect_success SHA1 'repository with references and objects' ' |
| test_when_finished "rm -rf repo" && |
| git init repo && |
| ( |
| cd repo && |
| test_commit_bulk 1005 && |
| git tag -a foo -m bar && |
| |
| oid="$(git rev-parse HEAD)" && |
| git update-ref refs/remotes/origin/foo "$oid" && |
| |
| # Also creates a commit, tree, and blob. |
| git notes add -m foo && |
| |
| # The tags disk size is handled specially due to the |
| # git-rev-list(1) --disk-usage=human option printing the full |
| # "byte/bytes" unit string instead of just "B". |
| cat >expect <<-EOF && |
| | Repository structure | Value | |
| | -------------------- | ---------- | |
| | * References | | |
| | * Count | 4 | |
| | * Branches | 1 | |
| | * Tags | 1 | |
| | * Remotes | 1 | |
| | * Others | 1 | |
| | | | |
| | * Reachable objects | | |
| | * Count | 3.02 k | |
| | * Commits | 1.01 k | |
| | * Trees | 1.01 k | |
| | * Blobs | 1.01 k | |
| | * Tags | 1 | |
| | * Inflated size | 16.03 MiB | |
| | * Commits | 217.92 KiB | |
| | * Trees | 15.81 MiB | |
| | * Blobs | 11.68 KiB | |
| | * Tags | 132 B | |
| | * Disk size | $(object_type_disk_usage all true) | |
| | * Commits | $(object_type_disk_usage commit true) | |
| | * Trees | $(object_type_disk_usage tree true) | |
| | * Blobs | $(object_type_disk_usage blob true) | |
| | * Tags | $(object_type_disk_usage tag) B | |
| EOF |
| |
| git repo structure >out 2>err && |
| |
| test_cmp expect out && |
| test_line_count = 0 err |
| ) |
| ' |
| |
| test_expect_success SHA1 'keyvalue and nul format' ' |
| test_when_finished "rm -rf repo" && |
| git init repo && |
| ( |
| cd repo && |
| test_commit_bulk 42 && |
| git tag -a foo -m bar && |
| |
| cat >expect <<-EOF && |
| references.branches.count=1 |
| references.tags.count=1 |
| references.remotes.count=0 |
| references.others.count=0 |
| objects.commits.count=42 |
| objects.trees.count=42 |
| objects.blobs.count=42 |
| objects.tags.count=1 |
| objects.commits.inflated_size=9225 |
| objects.trees.inflated_size=28554 |
| objects.blobs.inflated_size=453 |
| objects.tags.inflated_size=132 |
| objects.commits.disk_size=$(object_type_disk_usage commit) |
| objects.trees.disk_size=$(object_type_disk_usage tree) |
| objects.blobs.disk_size=$(object_type_disk_usage blob) |
| objects.tags.disk_size=$(object_type_disk_usage tag) |
| EOF |
| |
| git repo structure --format=keyvalue >out 2>err && |
| |
| test_cmp expect out && |
| test_line_count = 0 err && |
| |
| # Replace key and value delimiters for nul format. |
| tr "\n=" "\0\n" <expect >expect_nul && |
| git repo structure --format=nul >out 2>err && |
| |
| test_cmp expect_nul out && |
| test_line_count = 0 err && |
| |
| # "-z", as a synonym to "--format=nul", participates in the |
| # usual "last one wins" rule. |
| git repo structure --format=table -z >out 2>err && |
| |
| test_cmp expect_nul out && |
| test_line_count = 0 err |
| ) |
| ' |
| |
| test_expect_success 'progress meter option' ' |
| test_when_finished "rm -rf repo" && |
| git init repo && |
| ( |
| cd repo && |
| test_commit foo && |
| |
| GIT_PROGRESS_DELAY=0 git repo structure --progress >out 2>err && |
| |
| test_file_not_empty out && |
| test_grep "Counting references: 2, done." err && |
| test_grep "Counting objects: 3, done." err && |
| |
| GIT_PROGRESS_DELAY=0 git repo structure --no-progress >out 2>err && |
| |
| test_file_not_empty out && |
| test_line_count = 0 err |
| ) |
| ' |
| |
| test_done |