mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
All repository structure stats are outputted in a human-friendly table form. This format is not suitable for machine parsing. Add a --format option that supports three output modes: `table`, `keyvalue`, and `nul`. The `table` mode is the default format and prints the same table output as before. With the `keyvalue` mode, each line of output contains a key-value pair of a repository stat. The '=' character is used to delimit between keys and values. The `nul` mode is similar to `keyvalue`, but key-values are delimited by a NUL character instead of a newline. Also, instead of a '=' character to delimit between keys and values, a newline character is used. This allows stat values to support special characters without having to cquote them. These two new modes provides output that is more machine-friendly. Signed-off-by: Justin Tobler <jltobler@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
110 lines
2.5 KiB
Bash
Executable File
110 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='test git repo structure'
|
|
|
|
. ./test-lib.sh
|
|
|
|
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 |
|
|
EOF
|
|
|
|
git repo structure >out 2>err &&
|
|
|
|
test_cmp expect out &&
|
|
test_line_count = 0 err
|
|
)
|
|
'
|
|
|
|
test_expect_success 'repository with references and objects' '
|
|
test_when_finished "rm -rf repo" &&
|
|
git init repo &&
|
|
(
|
|
cd repo &&
|
|
test_commit_bulk 42 &&
|
|
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 &&
|
|
|
|
cat >expect <<-\EOF &&
|
|
| Repository structure | Value |
|
|
| -------------------- | ----- |
|
|
| * References | |
|
|
| * Count | 4 |
|
|
| * Branches | 1 |
|
|
| * Tags | 1 |
|
|
| * Remotes | 1 |
|
|
| * Others | 1 |
|
|
| | |
|
|
| * Reachable objects | |
|
|
| * Count | 130 |
|
|
| * Commits | 43 |
|
|
| * Trees | 43 |
|
|
| * Blobs | 43 |
|
|
| * Tags | 1 |
|
|
EOF
|
|
|
|
git repo structure >out 2>err &&
|
|
|
|
test_cmp expect out &&
|
|
test_line_count = 0 err
|
|
)
|
|
'
|
|
|
|
test_expect_success '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
|
|
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
|
|
)
|
|
'
|
|
|
|
test_done
|