1. Stefan Saasen
  2. git

Commits

Johannes Schindelin  committed 16a7fcf

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>

  • Participants
  • Parent commits c4640fe
  • Branches master

Comments (0)

Files changed (2)

File Documentation/git-fsck.txt

View file
  • Ignore whitespace
 	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

File builtin-fsck.c

View file
  • Ignore whitespace
 			}
 			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;