From 16a7fcfe5e568b50ddebe2369600e71da67d1405 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sun, 22 Jul 2007 21:20:26 +0100 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- Documentation/git-fsck.txt | 6 ++++-- builtin-fsck.c | 12 +++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Documentation/git-fsck.txt b/Documentation/git-fsck.txt index 1a432f231..45c0bee50 100644 --- a/Documentation/git-fsck.txt +++ b/Documentation/git-fsck.txt @@ -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 diff --git a/builtin-fsck.c b/builtin-fsck.c index 350ec5e14..8d12287f0 100644 --- a/builtin-fsck.c +++ b/builtin-fsck.c @@ -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; -- 2.30.2