repo: add the field layout.bare

This commit is part of the series that introduces the new subcommand git-repo-info. The flag --is-bare-repository from git-rev-parse is used for retrieving whether the current repository is bare. This way, it is used for querying repository metadata, fitting in the purpose of git-repo-info. Then, add a new field layout.bare to the git-repo-info subcommand containing that information. Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk> Helped-by: Junio C Hamano <gitster@pobox.com> Helped-by: Justin Tobler <jltobler@gmail.com> Helped-by: Eric Sunshine <sunshine@sunshineco.com> Mentored-by: Karthik Nayak <karthik.188@gmail.com> Mentored-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Lucas Seiki Oshiro <lucasseikioshiro@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Lucas Seiki Oshiro committed Aug 16, 2025 at 19:46 UTC acf2669b542d0a8daa505923e52d314bbae4a237
3 files changed +30
Documentation/git-repo.adoc
+3
@@ -38,6 +38,9 @@ In order to obtain a set of values from `git repo info`, you should provide
38 the keys that identify them. Here's a list of the available keys and the
39 values that they return:
40
41 +`layout.bare`::
42 + `true` if this is a bare repository, otherwise `false`.
43 +
44 `references.format`::
45 The reference storage format. The valid values are:
46 +
builtin/repo.c
+10
@@ -1,4 +1,7 @@
1 +#define USE_THE_REPOSITORY_VARIABLE
2 +
3 #include "builtin.h"
4 +#include "environment.h"
5 #include "parse-options.h"
6 #include "quote.h"
7 #include "refs.h"
@@ -16,6 +19,12 @@ struct field {
19 get_value_fn *get_value;
20 };
21
22 +static int get_layout_bare(struct repository *repo UNUSED, struct strbuf *buf)
23 +{
24 + strbuf_addstr(buf, is_bare_repository() ? "true" : "false");
25 + return 0;
26 +}
27 +
28 static int get_references_format(struct repository *repo, struct strbuf *buf)
29 {
30 strbuf_addstr(buf,
@@ -25,6 +34,7 @@ static int get_references_format(struct repository *repo, struct strbuf *buf)
34
35 /* repo_info_fields keys must be in lexicographical order */
36 static const struct field repo_info_fields[] = {
37 + { "layout.bare", get_layout_bare },
38 { "references.format", get_references_format },
39 };
40
t/t1900-repo.sh
+17
@@ -38,6 +38,23 @@ test_repo_info 'ref format files is retrieved correctly' \
38 test_repo_info 'ref format reftable is retrieved correctly' \
39 'git init --ref-format=reftable' 'format-reftable' 'references.format' 'reftable'
40
41 +test_repo_info 'bare repository = false is retrieved correctly' \
42 + 'git init' 'nonbare' 'layout.bare' 'false'
43 +
44 +test_repo_info 'bare repository = true is retrieved correctly' \
45 + 'git init --bare' 'bare' 'layout.bare' 'true'
46 +
47 +test_expect_success 'values returned in order requested' '
48 + cat >expect <<-\EOF &&
49 + layout.bare=false
50 + references.format=files
51 + layout.bare=false
52 + EOF
53 + git init --ref-format=files ordered &&
54 + git -C ordered repo info layout.bare references.format layout.bare >actual &&
55 + test_cmp expect actual
56 +'
57 +
58 test_expect_success 'git-repo-info fails if an invalid key is requested' '
59 echo "error: key ${SQ}foo${SQ} not found" >expect &&
60 test_must_fail git repo info foo 2>actual &&