From: Aniket Gupta <aniketgupta3001@gmail.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
Aniket Gupta <aniketgupta3001@gmail.com>
Subject: [GSoC PATCH] fsck: report the real object count in the connectivity message
Date: Tue, 20 Oct 2026 10:21:34 +0000 [thread overview]
Message-ID: <20261020102134.42151-1-aniketgupta3001@gmail.com> (raw)
The verbose "Checking connectivity" message prints the value of
get_max_object_index(), which is number of buckets in the object hash
and not the number of objects in it. The hash is larger than what it
holds so a repository with 21 objects says 64 objects.
Add get_object_count() to return the number of objects in the hash and
use it for the message. The loop below will still walk every bucket and
it keeps using get_max_object_index().
Signed-off-by: Aniket Gupta <aniketgupta3001@gmail.com>
---
This goes on top of "fsck: use Q_() for the verbose connectivity
message" which Junio had queued. He mentioned that the number was not
the real count and this is the separate fix for that.
index-pack also uses get_max_object_index() as the total for its
"Checking objects" progress. That is unchanged since it walks the same
buckets.
builtin/fsck.c | 13 ++++++++-----
object.c | 5 +++++
object.h | 7 +++++++
t/t1450-fsck.sh | 15 +++++++++++++++
4 files changed, 35 insertions(+), 5 deletions(-)
diff --git a/builtin/fsck.c b/builtin/fsck.c
index 710780e35..da51b2a91 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -378,11 +378,14 @@ static void check_connectivity(struct repository *repo)
/* Look up all the requirements, warn about missing objects.. */
max = get_max_object_index(repo);
- if (verbose)
- fprintf_ln(stderr, Q_("Checking connectivity (%d object)",
- "Checking connectivity (%d objects)",
- max),
- max);
+ if (verbose) {
+ unsigned int nr = get_object_count(repo);
+
+ fprintf_ln(stderr, Q_("Checking connectivity (%u object)",
+ "Checking connectivity (%u objects)",
+ nr),
+ nr);
+ }
for (i = 0; i < max; i++) {
struct object *obj = get_indexed_object(repo, i);
diff --git a/object.c b/object.c
index 97f7fc0e8..2fdba93d4 100644
--- a/object.c
+++ b/object.c
@@ -20,6 +20,11 @@ unsigned int get_max_object_index(const struct repository *repo)
return repo->parsed_objects->obj_hash_size;
}
+unsigned int get_object_count(const struct repository *repo)
+{
+ return repo->parsed_objects->nr_objs;
+}
+
struct object *get_indexed_object(const struct repository *repo,
unsigned int idx)
{
diff --git a/object.h b/object.h
index 46cade33f..20ea6f5c0 100644
--- a/object.h
+++ b/object.h
@@ -173,6 +173,13 @@ int type_from_string_gently(const char *str, ssize_t, int gentle);
*/
unsigned int get_max_object_index(const struct repository *repo);
+/*
+ * Return the number of objects currently in the object hashmap. This
+ * is smaller than the value get_max_object_index() returns, as that
+ * counts the buckets, which are not all in use.
+ */
+unsigned int get_object_count(const struct repository *repo);
+
/*
* Return the object from the specified bucket in the object hashmap.
*/
diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
index 1b4074304..ceb7c649c 100755
--- a/t/t1450-fsck.sh
+++ b/t/t1450-fsck.sh
@@ -1152,4 +1152,19 @@ test_expect_success 'fsck reports problems in current worktree index without fil
test_cmp expect actual
'
+test_expect_success 'fsck --verbose reports the number of objects' '
+ git init count &&
+ test_commit -C count one &&
+ git -C count fsck --verbose 2>err &&
+ test_grep "Checking connectivity (3 objects)" err
+'
+
+test_expect_success 'fsck --verbose uses the singular for a single object' '
+ git init single &&
+ blob=$(echo single | git -C single hash-object -w --stdin) &&
+ git -C single update-ref refs/tags/blob $blob &&
+ git -C single fsck --verbose 2>err &&
+ test_grep "Checking connectivity (1 object)" err
+'
+
test_done
--
2.43.0
reply other threads:[~2026-10-20 10:21 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261020102134.42151-1-aniketgupta3001@gmail.com \
--to=aniketgupta3001@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox