summaryrefslogtreecommitdiff
path: root/builtin-fsck.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-01-15 16:34:17 -0800
committerJunio C Hamano <gitster@pobox.com>2008-01-16 11:37:57 -0800
commit6232f62bc77ba9fc57fa97c61a7678a9f243c3bd (patch)
tree01af4e291310c15d7cb5d051722ca4455b234ba0 /builtin-fsck.c
parent7c3fd25dcf2a23ed43bae2ba23a46edab4644a9f (diff)
downloadgit-6232f62bc77ba9fc57fa97c61a7678a9f243c3bd.tar.gz
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 <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-fsck.c')
-rw-r--r--builtin-fsck.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/builtin-fsck.c b/builtin-fsck.c
index e4874f64a3..2a6e94deaf 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);