Re: [PATCH v3] refs: return conflict error when checking packed refs
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- May 6, 2024, 11:40 UTC
- Message-ID
- <CAOLa=ZSre3f+0SR-_migfkPONqhinobKjU=NnGOJ_sTNM_L5ug@mail.gmail.com>
- In-Reply-To
- <pull.1716.v3.git.git.1714791848557.gitgitgadget@gmail.com>
Hello Ivan,
"Ivan Tse via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Ivan Tse <ivan.tse1@gmail.com>
[snip]
Show 17 quoted lines
> diff --git a/refs/files-backend.c b/refs/files-backend.c
> index a098d14ea00..97473f377d1 100644
> --- a/refs/files-backend.c
> +++ b/refs/files-backend.c
> @@ -794,8 +794,10 @@ static int lock_raw_ref(struct files_ref_store *refs,
> */
> if (refs_verify_refname_available(
> refs->packed_ref_store, refname,
> - extras, NULL, err))
> + extras, NULL, err)) {
> + ret = TRANSACTION_NAME_CONFLICT;
> goto error_return;
> + }
> }
>
> ret = 0;
>Shouldn't we also do this change in `lock_ref_oid_basic` where we gather the same lock again for creating the reflog entry?
Show 31 quoted lines
> diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
> index 33d34d5ae9e..530369266fd 100755
> --- a/t/t5510-fetch.sh
> +++ b/t/t5510-fetch.sh
> @@ -1091,6 +1091,22 @@ test_expect_success 'branchname D/F conflict resolved by --prune' '
> test_cmp expect actual
> '
>
> +test_expect_success 'branchname D/F conflict rejected with targeted error message' '
> + git clone . df-conflict-error &&
> + git branch dir_conflict &&
> + (
> + cd df-conflict-error &&
> + git update-ref refs/remotes/origin/dir_conflict/file HEAD &&
> + test_must_fail git fetch 2>err &&
> + test_grep "error: some local refs could not be updated; try running" err &&
> + test_grep " ${SQ}git remote prune origin${SQ} to remove any old, conflicting branches" err &&
> + git pack-refs --all &&
> + test_must_fail git fetch 2>err-packed &&
> + test_grep "error: some local refs could not be updated; try running" err-packed &&
> + test_grep " ${SQ}git remote prune origin${SQ} to remove any old, conflicting branches" err-packed
> + )
> +'
> +
> test_expect_success 'fetching a one-level ref works' '
> test_commit extra &&
> git reset --hard HEAD^ &&
>
> base-commit: d4cc1ec35f3bcce816b69986ca41943f6ce21377
> --
> gitgitgadget