Merge branch 'it/refs-name-conflict'

Expose "name conflict" error when a ref creation fails due to D/F
conflict in the ref namespace, to improve an error message given by
"git fetch".

* it/refs-name-conflict:
  refs: return conflict error when checking packed refs
This commit is contained in:
Junio C Hamano
2024-05-23 11:04:27 -07:00
2 changed files with 19 additions and 1 deletions

View File

@@ -794,8 +794,10 @@ retry:
*/
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;

View File

@@ -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^ &&