git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/5] fsck: three levels of validation

From
Junio C Hamano <gitster@pobox.com>
Date
Jan 30, 2009, 11:05 UTC
Message-ID
<1233313517-24208-5-git-send-email-gitster@pobox.com>
In-Reply-To
<1233313517-24208-4-git-send-email-gitster@pobox.com>

Traditionally, "git fsck" only checked loose objects and "git fsck --full" checked both loose and packed objects fully.

This introduces a new medium level of validation that checks loose objects and runs the quicker packfile validation introduced earlier (in other words, the individual objects in packfiles are not validated, but we still make sure that the packfiles themselves are sound and individual objects pass their own CRC checks when the pack has version 2 idx file), and makes this new mode the default. The original "loose objects only" mode can be asked with --quick option.

In my private git project repository (almost fully packed but with may dangling objects) on my AMD 64X2:

    $ /usr/bin/time ./git-fsck --quick
    0.18user 0.02system 0:00.20elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
    0inputs+0outputs (0major+3205minor)pagefaults 0swaps
    $ /usr/bin/time ./git-fsck
    68.61user 0.43system 1:09.06elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
    0inputs+0outputs (0major+116707minor)pagefaults 0swaps
    $ /usr/bin/time ./git-fsck --full
    90.36user 0.61system 1:31.00elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
    0inputs+0outputs (0major+169641minor)pagefaults 0swaps
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin-fsck.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/builtin-fsck.c b/builtin-fsck.c
index 8dc7881..72bf33b 100644
--- a/builtin-fsck.c
+++ b/builtin-fsck.c
@@ -20,6 +20,7 @@ static int show_tags;
 static int show_unreachable;
 static int include_reflogs = 1;
 static int check_full;
+static int check_quick;
 static int check_strict;
 static int keep_cache_objects;
 static unsigned char head_sha1[20];
@@ -576,7 +577,8 @@ static struct option fsck_opts[] = {
 	OPT_BOOLEAN(0, "root", &show_root, "report root nodes"),
 	OPT_BOOLEAN(0, "cache", &keep_cache_objects, "make index objects head nodes"),
 	OPT_BOOLEAN(0, "reflogs", &include_reflogs, "make reflogs head nodes (default)"),
-	OPT_BOOLEAN(0, "full", &check_full, "also consider alternate objects"),
+	OPT_BOOLEAN(0, "full", &check_full, "fully check packs"),
+	OPT_BOOLEAN(0, "quick", &check_quick, "only check loose objects"),
 	OPT_BOOLEAN(0, "strict", &check_strict, "enable more strict checking"),
 	OPT_BOOLEAN(0, "lost-found", &write_lost_and_found,
 				"write dangling objects in .git/lost-found"),
@@ -587,10 +589,14 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
 {
 	int i, heads;
 	struct alternate_object_database *alt;
+	unsigned verify_pack_flag;
 
 	errors_found = 0;
 
 	argc = parse_options(argc, argv, fsck_opts, fsck_usage, 0);
+	if (check_full && check_quick)
+		die("--full and --quick?  which one do you want?");
+
 	if (write_lost_and_found) {
 		check_full = 1;
 		include_reflogs = 0;
@@ -608,13 +614,14 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
 		fsck_object_dir(namebuf);
 	}
 
-	if (check_full) {
+	if (!check_quick) {
 		struct packed_git *p;
 
+		verify_pack_flag = check_full ? 0 : VERIFY_PACK_QUICK;
 		prepare_packed_git();
 		for (p = packed_git; p; p = p->next)
 			/* verify gives error messages itself */
-			verify_pack(p, 0);
+			verify_pack(p, verify_pack_flag);
 
 		for (p = packed_git; p; p = p->next) {
 			uint32_t j, num;
-- 
1.6.1.2.312.g5be3c
Previous: Junio C HamanoNext: Junio C Hamano
Message 5 of 10 in “fsck updates”
  1. 0/5 fsck updatesJunio C Hamano, Jan 30, 2009
  2. 1/5 pack-check.c: minor formatting fix to match coding styleJunio C Hamano, Jan 30, 2009
  3. 2/5 verify_pack(): allow a quicker verification for a pack with version 2 idxJunio C Hamano, Jan 30, 2009
  4. 3/5 verify-pack: add --quickJunio C Hamano, Jan 30, 2009
  5. 4/5 fsck: three levels of validationJunio C Hamano, Jan 30, 2009
  6. 5/5 [squash] fsck: revert --quick to the default and introduce --mediumJunio C Hamano, Jan 30, 2009
  7. Kjetil BarvikJan 30, 2009
  8. Nanako ShiraishiJan 31, 2009
  9. Marius Storm-OlsenJan 31, 2009
  10. Nanako ShiraishiFeb 1, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.