Hello Ivan, "Ivan Tse via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Ivan Tse <ivan.tse1@xxxxxxxxx> [snip] > 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? > 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
Attachment:
signature.asc
Description: PGP signature