Merge branch 'jt/ref-transaction-abort-fix'

A ref transaction corner case fix.

* jt/ref-transaction-abort-fix:
  builtin/fetch: avoid aborting closed reference transaction
This commit is contained in:
Junio C Hamano 2025-04-16 13:54:17 -07:00
commit 518ed014f6
2 changed files with 21 additions and 1 deletions

View File

@ -1859,8 +1859,15 @@ static int do_fetch(struct transport *transport,
goto cleanup;
retcode = ref_transaction_commit(transaction, &err);
if (retcode)
if (retcode) {
/*
* Explicitly handle transaction cleanup to avoid
* aborting an already closed transaction.
*/
ref_transaction_free(transaction);
transaction = NULL;
goto cleanup;
}
}
commit_fetch_head(&fetch_head);

View File

@ -537,6 +537,19 @@ test_expect_success 'fetch --atomic --append appends to FETCH_HEAD' '
test_cmp expected atomic/.git/FETCH_HEAD
'
test_expect_success REFFILES 'fetch --atomic fails transaction if reference locked' '
test_when_finished "rm -rf upstream repo" &&
git init upstream &&
git -C upstream commit --allow-empty -m 1 &&
git -C upstream switch -c foobar &&
git clone --mirror upstream repo &&
git -C upstream commit --allow-empty -m 2 &&
touch repo/refs/heads/foobar.lock &&
test_must_fail git -C repo fetch --atomic origin
'
test_expect_success '--refmap="" ignores configured refspec' '
cd "$TRASH_DIRECTORY" &&
git clone "$D" remote-refs &&