mirror of
https://github.com/git-for-windows/git.git
synced 2026-02-03 18:59:59 -06:00
builtin/fsck: move generic HEAD check into refs_fsck()
Move the check that detects "HEAD" refs that do not point at a branch into `refs_fsck()`. This follows the same motivation as the preceding commit. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
46d611cada
commit
9727336b31
@ -13,6 +13,9 @@
|
|||||||
`badGpgsig`::
|
`badGpgsig`::
|
||||||
(ERROR) A tag contains a bad (truncated) signature (e.g., `gpgsig`) header.
|
(ERROR) A tag contains a bad (truncated) signature (e.g., `gpgsig`) header.
|
||||||
|
|
||||||
|
`badHeadTarget`::
|
||||||
|
(ERROR) The `HEAD` ref is a symref that does not refer to a branch.
|
||||||
|
|
||||||
`badHeaderContinuation`::
|
`badHeaderContinuation`::
|
||||||
(ERROR) A continuation header (such as for `gpgsig`) is unexpectedly truncated.
|
(ERROR) A continuation header (such as for `gpgsig`) is unexpectedly truncated.
|
||||||
|
|
||||||
|
|||||||
@ -728,13 +728,6 @@ static void fsck_head_link(const char *head_ref_name,
|
|||||||
error(_("invalid %s"), head_ref_name);
|
error(_("invalid %s"), head_ref_name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (strcmp(*head_points_at, head_ref_name) &&
|
|
||||||
!starts_with(*head_points_at, "refs/heads/")) {
|
|
||||||
errors_found |= ERROR_REFS;
|
|
||||||
error(_("%s points to something strange (%s)"),
|
|
||||||
head_ref_name, *head_points_at);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
1
fsck.h
1
fsck.h
@ -30,6 +30,7 @@ enum fsck_msg_type {
|
|||||||
FUNC(BAD_DATE_OVERFLOW, ERROR) \
|
FUNC(BAD_DATE_OVERFLOW, ERROR) \
|
||||||
FUNC(BAD_EMAIL, ERROR) \
|
FUNC(BAD_EMAIL, ERROR) \
|
||||||
FUNC(BAD_GPGSIG, ERROR) \
|
FUNC(BAD_GPGSIG, ERROR) \
|
||||||
|
FUNC(BAD_HEAD_TARGET, ERROR) \
|
||||||
FUNC(BAD_NAME, ERROR) \
|
FUNC(BAD_NAME, ERROR) \
|
||||||
FUNC(BAD_OBJECT_SHA1, ERROR) \
|
FUNC(BAD_OBJECT_SHA1, ERROR) \
|
||||||
FUNC(BAD_PACKED_REF_ENTRY, ERROR) \
|
FUNC(BAD_PACKED_REF_ENTRY, ERROR) \
|
||||||
|
|||||||
12
refs.c
12
refs.c
@ -334,8 +334,18 @@ int refs_fsck_ref(struct ref_store *refs UNUSED, struct fsck_options *o,
|
|||||||
|
|
||||||
int refs_fsck_symref(struct ref_store *refs UNUSED, struct fsck_options *o,
|
int refs_fsck_symref(struct ref_store *refs UNUSED, struct fsck_options *o,
|
||||||
struct fsck_ref_report *report,
|
struct fsck_ref_report *report,
|
||||||
const char *refname UNUSED, const char *target)
|
const char *refname, const char *target)
|
||||||
{
|
{
|
||||||
|
const char *stripped_refname;
|
||||||
|
|
||||||
|
parse_worktree_ref(refname, NULL, NULL, &stripped_refname);
|
||||||
|
|
||||||
|
if (!strcmp(stripped_refname, "HEAD") &&
|
||||||
|
!starts_with(target, "refs/heads/") &&
|
||||||
|
fsck_report_ref(o, report, FSCK_MSG_BAD_HEAD_TARGET,
|
||||||
|
"HEAD points to non-branch '%s'", target))
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (is_root_ref(target))
|
if (is_root_ref(target))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@ -910,10 +910,10 @@ test_expect_success 'complains about broken root ref' '
|
|||||||
git init repo &&
|
git init repo &&
|
||||||
(
|
(
|
||||||
cd repo &&
|
cd repo &&
|
||||||
echo "ref: refs/../HEAD" >.git/HEAD &&
|
echo "ref: refs/heads/../HEAD" >.git/HEAD &&
|
||||||
test_must_fail git refs verify 2>err &&
|
test_must_fail git refs verify 2>err &&
|
||||||
cat >expect <<-EOF &&
|
cat >expect <<-EOF &&
|
||||||
error: HEAD: badReferentName: points to invalid refname ${SQ}refs/../HEAD${SQ}
|
error: HEAD: badReferentName: points to invalid refname ${SQ}refs/heads/../HEAD${SQ}
|
||||||
EOF
|
EOF
|
||||||
test_cmp expect err
|
test_cmp expect err
|
||||||
)
|
)
|
||||||
@ -926,10 +926,10 @@ test_expect_success 'complains about broken root ref in worktree' '
|
|||||||
cd repo &&
|
cd repo &&
|
||||||
test_commit initial &&
|
test_commit initial &&
|
||||||
git worktree add ../worktree &&
|
git worktree add ../worktree &&
|
||||||
echo "ref: refs/../HEAD" >.git/worktrees/worktree/HEAD &&
|
echo "ref: refs/heads/../HEAD" >.git/worktrees/worktree/HEAD &&
|
||||||
test_must_fail git refs verify 2>err &&
|
test_must_fail git refs verify 2>err &&
|
||||||
cat >expect <<-EOF &&
|
cat >expect <<-EOF &&
|
||||||
error: worktrees/worktree/HEAD: badReferentName: points to invalid refname ${SQ}refs/../HEAD${SQ}
|
error: worktrees/worktree/HEAD: badReferentName: points to invalid refname ${SQ}refs/heads/../HEAD${SQ}
|
||||||
EOF
|
EOF
|
||||||
test_cmp expect err
|
test_cmp expect err
|
||||||
)
|
)
|
||||||
|
|||||||
@ -113,7 +113,7 @@ test_expect_success 'HEAD link pointing at a funny place' '
|
|||||||
test-tool ref-store main create-symref HEAD refs/funny/place &&
|
test-tool ref-store main create-symref HEAD refs/funny/place &&
|
||||||
# avoid corrupt/broken HEAD from interfering with repo discovery
|
# avoid corrupt/broken HEAD from interfering with repo discovery
|
||||||
test_must_fail env GIT_DIR=.git git fsck 2>out &&
|
test_must_fail env GIT_DIR=.git git fsck 2>out &&
|
||||||
test_grep "HEAD points to something strange" out
|
test_grep "HEAD: badHeadTarget: HEAD points to non-branch ${SQ}refs/funny/place${SQ}" out
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success REFFILES 'HEAD link pointing at a funny object (from different wt)' '
|
test_expect_success REFFILES 'HEAD link pointing at a funny object (from different wt)' '
|
||||||
@ -148,7 +148,7 @@ test_expect_success 'other worktree HEAD link pointing at a funny place' '
|
|||||||
git worktree add other &&
|
git worktree add other &&
|
||||||
git -C other symbolic-ref HEAD refs/funny/place &&
|
git -C other symbolic-ref HEAD refs/funny/place &&
|
||||||
test_must_fail git fsck 2>out &&
|
test_must_fail git fsck 2>out &&
|
||||||
test_grep "worktrees/other/HEAD points to something strange" out
|
test_grep "worktrees/other/HEAD: badHeadTarget: HEAD points to non-branch ${SQ}refs/funny/place${SQ}" out
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'commit with multiple signatures is okay' '
|
test_expect_success 'commit with multiple signatures is okay' '
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user