git-fsck: learn about --verbose
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>maint
parent
00f429af7b
commit
20f1eb6b46
|
@ -10,7 +10,7 @@ SYNOPSIS
|
|||
--------
|
||||
[verse]
|
||||
'git-fsck' [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
|
||||
[--full] [--strict] [<object>*]
|
||||
[--full] [--strict] [--verbose] [<object>*]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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')
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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];
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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"))
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue