From: Junio C Hamano <gitster@xxxxxxxxx> An earlier commit fc8b5f0 (Deprecate git-lost-found, 2007-11-08) declared "lost-found" deprecated, because "fsck" learned "--lost-found" option that drops the found objects in $GIT_DIR/lost-found. But the output from the lost-found program has been much more informative than the plain vanilla "git fsck" (or "git fsck --lost-found") output. In that sense, forcing users to use "fsck --lost-found" when they want to use "lost-found" is a regression. This patch slightly enhances the output from "fsck --lost-found" to add oneline description at the end of the usual "dangling <type> <sha-1>" message for commit objects it found. Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- As for the deprecation of lost-found, I think it is correct, and should not be reverted. We _do_ have way too many commands, and lost-found logically _belongs_ into fsck. The proper fix is to fix fsck --lost-found. Now, I did not yet look closely at the output of git-lost-found.sh, as I already switched to "master" in the hope that 1.5.5-rc2 will be almost identical to 1.5.5, and I fully intend to push for a quick release (after the pending "fetch" resolutions). After 1.5.5, I will tend to lost-found. builtin-fsck.c | 43 ++++++++++++++++++++++++++++++++++++------- 1 files changed, 36 insertions(+), 7 deletions(-) diff --git a/builtin-fsck.c b/builtin-fsck.c index f01263a..b57cc78 100644 --- a/builtin-fsck.c +++ b/builtin-fsck.c @@ -149,10 +149,12 @@ static void dangling_object(struct object *obj) { char *filename; FILE *f; - printf("dangling %s %s\n", typename(obj->type), - sha1_to_hex(obj->sha1)); + enum object_type type; + unsigned long size; + char *buf = NULL; + if (!write_lost_and_found) - return; + goto report_and_exit; filename = git_path("lost-found/%s/%s", obj->type == OBJ_COMMIT ? "commit" : "other", @@ -164,11 +166,10 @@ static void dangling_object(struct object *obj) } if (!(f = fopen(filename, "w"))) die("Could not open %s", filename); + if (obj->type == OBJ_BLOB || obj->type == OBJ_COMMIT) + buf = read_sha1_file(obj->sha1, &type, &size); + 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); @@ -176,6 +177,34 @@ static void dangling_object(struct object *obj) } else fprintf(f, "%s\n", sha1_to_hex(obj->sha1)); fclose(f); + + if (obj->type == OBJ_COMMIT) { + struct strbuf sb = STRBUF_INIT; + struct commit *commit = lookup_commit(obj->sha1); + int reported = 0; + + if (!commit->buffer) + commit->buffer = buf; + if (commit->buffer) { + parse_commit(commit); + pretty_print_commit(CMIT_FMT_ONELINE, commit, &sb, + 0, NULL, NULL, 0, 0); + printf("dangling commit %s (%s)\n", + sha1_to_hex(obj->sha1), sb.buf); + reported = 1; + } + strbuf_release(&sb); + free(commit->buffer); + if (buf && commit->buffer != buf) + free(buf); + commit->buffer = NULL; + if (reported) + return; + } + + report_and_exit: + printf("dangling %s %s\n", typename(obj->type), + sha1_to_hex(obj->sha1)); } /* -- 1.5.5.rc2.186.gbac51 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html