Re: [PATCH v3] refs: return conflict error when checking packed refs
From: Karthik Nayak <hidden>
Date: 2024-05-06 11:40:47
Hello Ivan, "Ivan Tse via GitGitGadget" [off-list ref] writes:
From: Ivan Tse <redacted>
[snip]
quoted hunk ↗ jump to hunk
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?
quoted hunk ↗ jump to hunk
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
Attachments
- signature.asc [application/pgp-signature] 690 bytes