aboutsummaryrefslogtreecommitdiffstats
path: root/t/t1901-repo-structure.sh
diff options
context:
space:
mode:
authorJustin Tobler <jltobler@gmail.com>2025-10-21 13:26:00 -0500
committerJunio C Hamano <gitster@pobox.com>2025-10-21 14:40:38 -0700
commit17215675b5a2c2eab54b295a7e92d953af2e8779 (patch)
treef50ac93ab559c6d078813dbb3dfb1ee8170a084b /t/t1901-repo-structure.sh
parentbuiltin/repo: add object counts in structure output (diff)
downloadgit-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-xt/t1901-repo-structure.sh33
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