Browse Source

fsck --lost-found: write blob's contents, not their SHA-1

When looking for a lost blob, it is much nicer to be able to grep
through .git/lost-found/other/* than to write an inefficient loop
over the file names.  So write the contents of the dangling blobs,
not their object names.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Schindelin 18 years ago committed by Junio C Hamano
parent
commit
16a7fcfe5e
  1. 6
      Documentation/git-fsck.txt
  2. 12
      builtin-fsck.c

6
Documentation/git-fsck.txt

@ -65,8 +65,10 @@ index file and all SHA1 references in .git/refs/* as heads. @@ -65,8 +65,10 @@ index file and all SHA1 references in .git/refs/* as heads.
Be chatty.

--lost-found::
Write dangling refs into .git/lost-found/commit/ or
.git/lost-found/other/, depending on type.
Write dangling objects into .git/lost-found/commit/ or
.git/lost-found/other/, depending on type. If the object is
a blob, the contents are written into the file, rather than
its object name.

It tests SHA1 and general object sanity, and it does full tracking of
the resulting reachability and everything else. It prints out any

12
builtin-fsck.c

@ -152,7 +152,17 @@ static void check_unreachable_object(struct object *obj) @@ -152,7 +152,17 @@ static void check_unreachable_object(struct object *obj)
}
if (!(f = fopen(filename, "w")))
die("Could not open %s", filename);
fprintf(f, "%s\n", sha1_to_hex(obj->sha1));
if (obj->type == OBJ_BLOB) {
enum object_type type;
unsigned long size;
char *buf = read_sha1_file(obj->sha1,
&type, &size);
if (buf) {
fwrite(buf, size, 1, f);
free(buf);
}
} else
fprintf(f, "%s\n", sha1_to_hex(obj->sha1));
fclose(f);
}
return;

Loading…
Cancel
Save