From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: [PATCH 2/2] fsck --lost-found: show found commits human readably
Date: Fri, 28 Mar 2008 15:08:26 +0100 (CET) [thread overview]
Message-ID: <alpine.LSU.1.00.0803281505510.18259@racer.site> (raw)
In-Reply-To: <alpine.LSU.1.00.0803281504591.18259@racer.site>
From: Junio C Hamano <gitster@pobox.com>
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@pobox.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
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
prev parent reply other threads:[~2008-03-28 14:09 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-26 6:45 [PATCH] fsck --lost-found: show found commits human readably Junio C Hamano
2008-03-28 14:05 ` Johannes Schindelin
2008-03-28 14:05 ` [PATCH 1/2] fsck --lost-found: refactor handling of dangling objects Johannes Schindelin
2008-03-28 14:08 ` Johannes Schindelin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.LSU.1.00.0803281505510.18259@racer.site \
--to=johannes.schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox