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>
This commit is contained in:
Johannes Schindelin 2007-07-22 21:20:26 +01:00 committed by Junio C Hamano
parent c4640fe8d9
commit 16a7fcfe5e
2 changed files with 15 additions and 3 deletions

View file

@ -65,8 +65,10 @@ index file and all SHA1 references in .git/refs/* as heads.
Be chatty. Be chatty.
--lost-found:: --lost-found::
Write dangling refs into .git/lost-found/commit/ or Write dangling objects into .git/lost-found/commit/ or
.git/lost-found/other/, depending on type. .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 It tests SHA1 and general object sanity, and it does full tracking of
the resulting reachability and everything else. It prints out any the resulting reachability and everything else. It prints out any

View file

@ -152,7 +152,17 @@ static void check_unreachable_object(struct object *obj)
} }
if (!(f = fopen(filename, "w"))) if (!(f = fopen(filename, "w")))
die("Could not open %s", filename); 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); fclose(f);
} }
return; return;