[PATCH 4/7] builtin: expose the object storage format
flat view
WARM3d
SUPERSEDED
From: Patrick Steinhardt <hidden>
Date: 2026-10-19 08:56:18
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
Status: Superseded by v4 (posted 2026-10-27). [go to v4]
Revision v1 (4 revisions archived).
Revisions (4)
The ref storage format of a repository can be inspected via both
git-rev-parse(1)'s "--show-ref-storage-format" and git-repo(1)'s
"references.storageFormat" field. Introduce the equivalent options for
the object storage format, as well.
Signed-off-by: Patrick Steinhardt <redacted>
---
Documentation/git-repo.adoc | 6 ++++++
Documentation/git-rev-parse.adoc | 5 +++++
builtin/repo.c | 10 ++++++++++
builtin/rev-parse.c | 7 +++++++
t/t0001-init.sh | 5 ++++-
t/t1900-repo-info.sh | 3 +++
6 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/Documentation/git-repo.adoc b/Documentation/git-repo.adoc
index cb8c1e7292..d2dc9b7a69 100644
--- a/Documentation/git-repo.adoc
+++ b/Documentation/git-repo.adoc@@ -105,6 +105,12 @@ values that they return: `object.format`:: The object format (hash algorithm) used in the repository. +`objects.storageFormat`:: + The object storage format used in the repository, as configured via + `extensions.objectStorage`. The valid values are: ++ +include::object-storage-format.adoc[] + `path.commondir.absolute`:: The canonical absolute path to the Git repository's common directory (the shared `.git` directory containing objects,
diff --git a/Documentation/git-rev-parse.adoc b/Documentation/git-rev-parse.adoc
index 5b866af66a..9103d54d53 100644
--- a/Documentation/git-rev-parse.adoc
+++ b/Documentation/git-rev-parse.adoc@@ -338,6 +338,11 @@ The following options are unaffected by `--path-format`: --show-ref-format:: Deprecated alias of `--show-ref-storage-format`. +--show-object-storage-format:: + Show the object storage format used for the repository. Prints the + value of `extensions.objectStorage`, or `files` when the extension is + not set. + Other Options ~~~~~~~~~~~~~
diff --git a/builtin/repo.c b/builtin/repo.c
index 84e012f83f..da11a56ede 100644
--- a/builtin/repo.c
+++ b/builtin/repo.c@@ -6,6 +6,7 @@ #include "hash.h" #include "hex.h" #include "odb.h" +#include "odb/source.h" #include "parse-options.h" #include "path.h" #include "path-walk.h"
@@ -128,11 +129,20 @@ static int get_references_format(struct repository *repo, struct strbuf *buf) return 0; } +static int get_object_storage_format(struct repository *repo, struct strbuf *buf) +{ + strbuf_addstr(buf, repo->object_storage_format ? + repo->object_storage_format : + odb_source_type_to_name(ODB_SOURCE_FILES)); + return 0; +} + /* repo_info_field keys must be in lexicographical order */ static const struct repo_info_field repo_info_field[] = { { "layout.bare", get_layout_bare }, { "layout.shallow", get_layout_shallow }, { "object.format", get_object_format }, + { "objects.storageFormat", get_object_storage_format }, { "path.commondir.absolute", get_path_commondir_absolute }, { "path.commondir.relative", get_path_commondir_relative }, { "path.gitdir.absolute", get_path_gitdir_absolute },
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index ec33c19bdf..b206944ad9 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c@@ -17,6 +17,7 @@ #include "gettext.h" #include "hash.h" #include "hex.h" +#include "odb/source.h" #include "refs.h" #include "quote.h" #include "object-name.h"
@@ -1138,6 +1139,12 @@ int cmd_rev_parse(int argc, puts(ref_storage_format_to_name(the_repository->ref_storage_format)); continue; } + if (!strcmp(arg, "--show-object-storage-format")) { + puts(the_repository->object_storage_format ? + the_repository->object_storage_format : + odb_source_type_to_name(ODB_SOURCE_FILES)); + continue; + } if (!strcmp(arg, "--end-of-options")) { seen_end_of_options = 1; if (filter & (DO_FLAGS | DO_REVS))
diff --git a/t/t0001-init.sh b/t/t0001-init.sh
index 5e7c25e42c..d080ab04a8 100755
--- a/t/t0001-init.sh
+++ b/t/t0001-init.sh@@ -853,7 +853,10 @@ test_expect_success DEFAULT_REPO_FORMAT 'extensions.objectStorage with files bac git -C objstorage config set core.repositoryformatversion 1 && git -C objstorage config set extensions.objectStorage files && test_commit -C objstorage A && - git -C objstorage rev-parse --verify HEAD + git -C objstorage rev-parse --verify HEAD && + echo files >expect && + git -C objstorage rev-parse --show-object-storage-format >actual && + test_cmp expect actual ' test_expect_success DEFAULT_REPO_FORMAT 'extensions.objectStorage with unknown backend' '
diff --git a/t/t1900-repo-info.sh b/t/t1900-repo-info.sh
index d115d2d9f9..493a78f230 100755
--- a/t/t1900-repo-info.sh
+++ b/t/t1900-repo-info.sh@@ -69,6 +69,9 @@ test_repo_info 'object.format = sha1 is retrieved correctly' \ test_repo_info 'object.format = sha256 is retrieved correctly' \ 'git init --object-format=sha256' 'sha256' 'object.format' 'sha256' +test_repo_info 'objects.storageFormat = files is retrieved correctly' \ + 'git init' 'objects-files' 'objects.storageFormat' 'files' + test_expect_success 'values returned in order requested' ' cat >expect <<-\EOF && layout.bare=false
--
2.56.0.269.g68944adf51.dirty