git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 6/6] receive-pack: utilize rejected ref error details

From
Jeff King <peff@peff.net>
Date
Jan 14, 2026, 18:03 UTC
Message-ID
<20260114180306.GI885771@coredump.intra.peff.net>
In-Reply-To
<20260114-633-regression-lost-diagnostic-message-when-pushing-non-commit-objects-to-refs-heads-v1-6-f5f8b173c501@gmail.com>
On Wed, Jan 14, 2026 at 04:40:47PM +0100, Karthik Nayak wrote:
Show 21 quoted lines
> In 9d2962a7c4 (receive-pack: use batched reference updates, 2025-05-19),
> git-receive-pack(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.
> 
> One downside of this is that the messages can be very verbose, for e.g.
> in the files backend, when trying to write a non-commit object to a
> branch, you would see:
> 
>    ! [remote rejected] 3eaec9ccf3a53f168362a6b3fdeb73426fb9813d ->
>    branch (cannot update ref 'refs/heads/branch': trying to write
>    non-commit object 3eaec9ccf3a53f168362a6b3fdeb73426fb9813d to branch
>    'refs/heads/branch')
> 
> Here the refname is repeated multiple times due to how error messages
> are propagated and filled over the code stack. This potentially can be
> cleaned up in a future commit.

If we are going to have a "potentially cleaned up in the future" state, I think I would prefer to see just:

  if (details)
	rp_error("%s", details);

here. And then it comes over the stderr sideband, but the actual status-table gets the same non-verbose message. That's what happened in v2.50.0 and earlier. Later if we want to try to cram more details into the machine-readable message we can.

-Peff
Previous: Karthik NayakNext: Karthik Nayak
Message 23 of 32 in “refs: provide detailed error messages when using batched update”
  1. 0/6 refs: provide detailed error messages when using batched updateKarthik Nayak, Jan 14, 2026
  2. 1/6 refs: remove unused headerKarthik Nayak, Jan 14, 2026
  3. Junio C HamanoJan 14, 2026
  4. Karthik NayakJan 15, 2026
  5. 2/6 refs: attach rejection details to updatesKarthik Nayak, Jan 14, 2026
  6. Jeff KingJan 14, 2026
  7. Karthik NayakJan 15, 2026
  8. Jeff KingJan 15, 2026
  9. Karthik NayakJan 16, 2026
  10. 3/6 refs: add rejection detail to the callback functionKarthik Nayak, Jan 14, 2026
  11. Jeff KingJan 14, 2026
  12. Karthik NayakJan 15, 2026
  13. 4/6 update-ref: utilize rejected error details if availableKarthik Nayak, Jan 14, 2026
  14. Junio C HamanoJan 14, 2026
  15. Jeff KingJan 14, 2026
  16. Karthik NayakJan 15, 2026
  17. 5/6 fetch: utilize rejected ref error detailsKarthik Nayak, Jan 14, 2026
  18. Junio C HamanoJan 14, 2026
  19. Karthik NayakJan 15, 2026
  20. Jeff KingJan 14, 2026
  21. Karthik NayakJan 15, 2026
  22. 6/6 receive-pack: utilize rejected ref error detailsKarthik Nayak, Jan 14, 2026
  23. Jeff KingJan 14, 2026
  24. Karthik NayakJan 15, 2026
  25. Junio C HamanoJan 14, 2026
  26. 0/6 refs: provide detailed error messages when using batched updateKarthik Nayak, Jan 25, 2026
  27. 1/6 refs: skip to next ref when current ref is rejectedKarthik Nayak, Jan 25, 2026
  28. 2/6 refs: add rejection detail to the callback functionKarthik Nayak, Jan 25, 2026
  29. 3/6 update-ref: utilize rejected error details if availableKarthik Nayak, Jan 25, 2026
  30. 4/6 fetch: utilize rejected ref error detailsKarthik Nayak, Jan 25, 2026
  31. 5/6 receive-pack: utilize rejected ref error detailsKarthik Nayak, Jan 25, 2026
  32. 6/6 fetch: delay user information post committing of transactionKarthik Nayak, Jan 25, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.