diff options
| author | Justin Tobler <jltobler@gmail.com> | 2025-10-21 13:26:00 -0500 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2025-10-21 14:40:38 -0700 |
| commit | 17215675b5a2c2eab54b295a7e92d953af2e8779 (patch) | |
| tree | f50ac93ab559c6d078813dbb3dfb1ee8170a084b /t/t1901-repo-structure.sh | |
| parent | builtin/repo: add object counts in structure output (diff) | |
| download | git-17215675b5a2c2eab54b295a7e92d953af2e8779.tar.gz git-17215675b5a2c2eab54b295a7e92d953af2e8779.zip | |
builtin/repo: add keyvalue and nul format for structure stats
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>
Diffstat (limited to 't/t1901-repo-structure.sh')
| -rwxr-xr-x | t/t1901-repo-structure.sh | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/t/t1901-repo-structure.sh b/t/t1901-repo-structure.sh index c32cf4e239..14bd8aede5 100755 --- a/t/t1901-repo-structure.sh +++ b/t/t1901-repo-structure.sh @@ -73,4 +73,37 @@ test_expect_success 'repository with references and objects' ' ) ' +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 |
