diff options
| -rw-r--r-- | builtin-fsck.c | 13 | 
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);  | 
