From: Linus Torvalds Date: Wed, 16 Jan 2008 00:34:17 +0000 (-0800) Subject: Make 'git fsck' complain about non-commit branches X-Git-Tag: v1.5.4-rc4~30 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=6232f62bc77ba9fc57fa97c61a7678a9f243c3bd;p=git.git Make 'git fsck' complain about non-commit branches Since having non-commits in branches is a no-no, and just means you cannot commit on them, let's make fsck tell you when a branch is bad. Signed-off-by: Linus Torvalds Signed-off-by: Junio C Hamano --- diff --git a/builtin-fsck.c b/builtin-fsck.c index e4874f64a..2a6e94dea 100644 --- a/builtin-fsck.c +++ b/builtin-fsck.c @@ -555,20 +555,23 @@ static int fsck_handle_reflog(const char *logname, const unsigned char *sha1, in return 0; } +static int is_branch(const char *refname) +{ + return !strcmp(refname, "HEAD") || !prefixcmp(refname, "refs/heads/"); +} + static int fsck_handle_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data) { struct object *obj; - obj = lookup_object(sha1); + obj = parse_object(sha1); if (!obj) { - if (has_sha1_file(sha1)) { - default_refs++; - return 0; /* it is in a pack */ - } error("%s: invalid sha1 pointer %s", refname, sha1_to_hex(sha1)); /* We'll continue with the rest despite the error.. */ return 0; } + if (obj->type != OBJ_COMMIT && is_branch(refname)) + error("%s: not a commit", refname); default_refs++; obj->used = 1; mark_reachable(obj, REACHABLE);