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 коммит произвёл Junio C Hamano
Родитель c4640fe8d9
Коммит 16a7fcfe5e
2 изменённых файлов: 15 добавлений и 3 удалений

Просмотреть файл

@ -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

Просмотреть файл

@ -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;