Skip to content

Commit

Permalink
fsck --lost-found: write blob's contents, not their SHA-1
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Schindelin authored and Junio C Hamano committed Jul 22, 2007
1 parent c4640fe commit 16a7fcf
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
6 changes: 4 additions & 2 deletions Documentation/git-fsck.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 11 additions & 1 deletion builtin-fsck.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 16a7fcf

Please sign in to comment.