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>
This commit is contained in:

committed by
Junio C Hamano

parent
7c3fd25dcf
commit
6232f62bc7
@ -555,20 +555,23 @@ static int fsck_handle_reflog(const char *logname, const unsigned char *sha1, in
|
|||||||
return 0;
|
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)
|
static int fsck_handle_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
|
||||||
{
|
{
|
||||||
struct object *obj;
|
struct object *obj;
|
||||||
|
|
||||||
obj = lookup_object(sha1);
|
obj = parse_object(sha1);
|
||||||
if (!obj) {
|
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));
|
error("%s: invalid sha1 pointer %s", refname, sha1_to_hex(sha1));
|
||||||
/* We'll continue with the rest despite the error.. */
|
/* We'll continue with the rest despite the error.. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (obj->type != OBJ_COMMIT && is_branch(refname))
|
||||||
|
error("%s: not a commit", refname);
|
||||||
default_refs++;
|
default_refs++;
|
||||||
obj->used = 1;
|
obj->used = 1;
|
||||||
mark_reachable(obj, REACHABLE);
|
mark_reachable(obj, REACHABLE);
|
||||||
|
Reference in New Issue
Block a user