mirror of
https://github.com/git-for-windows/git.git
synced 2025-12-12 15:59:24 -06:00
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:
commit
518ed014f6
@ -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);
|
||||
|
||||
@ -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 &&
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user