зеркало из https://github.com/microsoft/git.git
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:
Родитель
c4640fe8d9
Коммит
16a7fcfe5e
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче