Git development
 help / color / mirror / Atom feed
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