Skip to content

Commit

Permalink
git-fsck: learn about --verbose
Browse files Browse the repository at this point in the history
With --verbose, it gets really chatty now.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Johannes Schindelin authored and Junio C Hamano committed Jun 5, 2007
1 parent 00f429a commit 20f1eb6
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 2 deletions.
5 changes: 4 additions & 1 deletion Documentation/git-fsck.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ SYNOPSIS
--------
[verse]
'git-fsck' [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
[--full] [--strict] [<object>*]
[--full] [--strict] [--verbose] [<object>*]

DESCRIPTION
-----------
Expand Down Expand Up @@ -61,6 +61,9 @@ index file and all SHA1 references in .git/refs/* as heads.
objects that triggers this check, but it is recommended
to check new projects with this flag.

--verbose::
Be chatty.

It tests SHA1 and general object sanity, and it does full tracking of
the resulting reachability and everything else. It prints out any
corruption it finds (missing or bad objects), and if you use the
Expand Down
42 changes: 41 additions & 1 deletion builtin-fsck.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ static int check_strict;
static int keep_cache_objects;
static unsigned char head_sha1[20];
static int errors_found;
static int verbose;
#define ERROR_OBJECT 01
#define ERROR_REACHABLE 02

Expand Down Expand Up @@ -149,6 +150,9 @@ static void check_unreachable_object(struct object *obj)

static void check_object(struct object *obj)
{
if (verbose)
fprintf(stderr, "Checking %s\n", sha1_to_hex(obj->sha1));

if (obj->flags & REACHABLE)
check_reachable_object(obj);
else
Expand All @@ -161,6 +165,9 @@ static void check_connectivity(void)

/* Look up all the requirements, warn about missing objects.. */
max = get_max_object_index();
if (verbose)
fprintf(stderr, "Checking connectivity (%d objects)\n", max);

for (i = 0; i < max; i++) {
struct object *obj = get_indexed_object(i);

Expand Down Expand Up @@ -229,6 +236,10 @@ static int fsck_tree(struct tree *item)
const char *o_name;
const unsigned char *o_sha1;

if (verbose)
fprintf(stderr, "Checking tree %s\n",
sha1_to_hex(item->object.sha1));

init_tree_desc(&desc, item->buffer, item->size);

o_mode = 0;
Expand Down Expand Up @@ -317,6 +328,10 @@ static int fsck_commit(struct commit *commit)
char *buffer = commit->buffer;
unsigned char tree_sha1[20], sha1[20];

if (verbose)
fprintf(stderr, "Checking commit %s\n",
sha1_to_hex(commit->object.sha1));

if (memcmp(buffer, "tree ", 5))
return objerror(&commit->object, "invalid format - expected 'tree' line");
if (get_sha1_hex(buffer+5, tree_sha1) || buffer[45] != '\n')
Expand Down Expand Up @@ -345,6 +360,10 @@ static int fsck_tag(struct tag *tag)
{
struct object *tagged = tag->tagged;

if (verbose)
fprintf(stderr, "Checking tag %s\n",
sha1_to_hex(tag->object.sha1));

if (!tagged) {
return objerror(&tag->object, "could not load tagged object");
}
Expand Down Expand Up @@ -446,6 +465,9 @@ static void fsck_dir(int i, char *path)
if (!dir)
return;

if (verbose)
fprintf(stderr, "Checking directory %s\n", path);

while ((de = readdir(dir)) != NULL) {
char name[100];
unsigned char sha1[20];
Expand Down Expand Up @@ -480,6 +502,10 @@ static int fsck_handle_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
{
struct object *obj;

if (verbose)
fprintf(stderr, "Checking reflog %s->%s\n",
sha1_to_hex(osha1), sha1_to_hex(nsha1));

if (!is_null_sha1(osha1)) {
obj = lookup_object(osha1);
if (obj) {
Expand Down Expand Up @@ -549,6 +575,10 @@ static void get_default_heads(void)
static void fsck_object_dir(const char *path)
{
int i;

if (verbose)
fprintf(stderr, "Checking object directory\n");

for (i = 0; i < 256; i++) {
static char dir[4096];
sprintf(dir, "%s/%02x", path, i);
Expand All @@ -564,6 +594,9 @@ static int fsck_head_link(void)
int null_is_error = 0;
const char *head_points_at = resolve_ref("HEAD", sha1, 0, &flag);

if (verbose)
fprintf(stderr, "Checking HEAD link\n");

if (!head_points_at)
return error("Invalid HEAD");
if (!strcmp(head_points_at, "HEAD"))
Expand All @@ -586,6 +619,9 @@ static int fsck_cache_tree(struct cache_tree *it)
int i;
int err = 0;

if (verbose)
fprintf(stderr, "Checking cache tree\n");

if (0 <= it->entry_count) {
struct object *obj = parse_object(it->sha1);
if (!obj) {
Expand All @@ -605,7 +641,7 @@ static int fsck_cache_tree(struct cache_tree *it)

static const char fsck_usage[] =
"git-fsck [--tags] [--root] [[--unreachable] [--cache] [--full] "
"[--strict] <head-sha1>*]";
"[--strict] [--verbose] <head-sha1>*]";

int cmd_fsck(int argc, char **argv, const char *prefix)
{
Expand Down Expand Up @@ -645,6 +681,10 @@ int cmd_fsck(int argc, char **argv, const char *prefix)
check_strict = 1;
continue;
}
if (!strcmp(arg, "--verbose")) {
verbose = 1;
continue;
}
if (*arg == '-')
usage(fsck_usage);
}
Expand Down

0 comments on commit 20f1eb6

Please sign in to comment.