Skip to content

Commit 274f435

Browse files
KarthikNayakpeff
authored andcommitted
fetch: utilize rejected ref error details
In 0e358de (fetch: use batched reference updates, 2025-05-19), git-fetch(1) switched to using batched reference updates. This also introduced a regression wherein instead of providing detailed error messages for failed referenced updates, the users were provided generic error messages based on the error type. Similar to the previous commit, switch to using detailed error messages if present for failed reference updates to fix this regression. Reported-by: Elijah Newren <newren@gmail.com> Co-authored-by: Jeff King <peff@peff.net> Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent a366bde commit 274f435

2 files changed

Lines changed: 10 additions & 8 deletions

File tree

builtin/fetch.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1649,7 +1649,7 @@ static void ref_transaction_rejection_handler(const char *refname,
16491649
const char *old_target UNUSED,
16501650
const char *new_target UNUSED,
16511651
enum ref_transaction_error err,
1652-
const char *details UNUSED,
1652+
const char *details,
16531653
void *cb_data)
16541654
{
16551655
struct ref_rejection_data *data = cb_data;
@@ -1674,9 +1674,11 @@ static void ref_transaction_rejection_handler(const char *refname,
16741674
"branches"), data->remote_name);
16751675
data->conflict_msg_shown = true;
16761676
} else {
1677-
const char *reason = ref_transaction_error_msg(err);
1678-
1679-
error(_("fetching ref %s failed: %s"), refname, reason);
1677+
if (details)
1678+
error("%s", details);
1679+
else
1680+
error(_("fetching ref %s failed: %s"),
1681+
refname, ref_transaction_error_msg(err));
16801682
}
16811683

16821684
*data->retcode = 1;

t/t5510-fetch.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1516,7 +1516,7 @@ test_expect_success REFFILES 'existing reference lock in repo' '
15161516
git remote add origin ../base &&
15171517
touch refs/heads/foo.lock &&
15181518
test_must_fail git fetch -f origin "refs/heads/*:refs/heads/*" 2>err &&
1519-
test_grep "error: fetching ref refs/heads/foo failed: reference already exists" err &&
1519+
test_grep -e "error: cannot lock ref ${SQ}refs/heads/foo${SQ}: Unable to create" -e "refs/heads/foo.lock${SQ}: File exists." err &&
15201520
git rev-parse refs/heads/main >expect &&
15211521
git rev-parse refs/heads/branch >actual &&
15221522
test_cmp expect actual
@@ -1530,7 +1530,7 @@ test_expect_success CASE_INSENSITIVE_FS,REFFILES 'F/D conflict on case insensiti
15301530
cd case_insensitive &&
15311531
git remote add origin -- ../case_sensitive_fd &&
15321532
test_must_fail git fetch -f origin "refs/heads/*:refs/heads/*" 2>err &&
1533-
test_grep "failed: refname conflict" err &&
1533+
test_grep "cannot process ${SQ}refs/remotes/origin/foo${SQ} and ${SQ}refs/remotes/origin/foo/bar${SQ} at the same time" err &&
15341534
git rev-parse refs/heads/main >expect &&
15351535
git rev-parse refs/heads/foo/bar >actual &&
15361536
test_cmp expect actual
@@ -1544,7 +1544,7 @@ test_expect_success CASE_INSENSITIVE_FS,REFFILES 'D/F conflict on case insensiti
15441544
cd case_insensitive &&
15451545
git remote add origin -- ../case_sensitive_df &&
15461546
test_must_fail git fetch -f origin "refs/heads/*:refs/heads/*" 2>err &&
1547-
test_grep "failed: refname conflict" err &&
1547+
test_grep "cannot lock ref ${SQ}refs/remotes/origin/foo${SQ}: there is a non-empty directory ${SQ}./refs/remotes/origin/foo${SQ} blocking reference ${SQ}refs/remotes/origin/foo${SQ}" err &&
15481548
git rev-parse refs/heads/main >expect &&
15491549
git rev-parse refs/heads/Foo/bar >actual &&
15501550
test_cmp expect actual
@@ -1658,7 +1658,7 @@ test_expect_success REFFILES "FETCH_HEAD is updated even if ref updates fail" '
16581658
git remote add origin ../base &&
16591659
>refs/heads/foo.lock &&
16601660
test_must_fail git fetch -f origin "refs/heads/*:refs/heads/*" 2>err &&
1661-
test_grep "error: fetching ref refs/heads/foo failed: reference already exists" err &&
1661+
test_grep -e "error: cannot lock ref ${SQ}refs/heads/foo${SQ}: Unable to create" -e "refs/heads/foo.lock${SQ}: File exists." err &&
16621662
test_grep "branch ${SQ}branch${SQ} of ../base" FETCH_HEAD &&
16631663
test_grep "branch ${SQ}foo${SQ} of ../base" FETCH_HEAD
16641664
)

0 commit comments

Comments
 (0)