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

Re: Cryptic error messages?

From
Jeff King <peff@peff.net>
Date
Apr 22, 2009, 20:32 UTC
Message-ID
<20090422203251.GD14146@coredump.intra.peff.net>
In-Reply-To
<450196A1AAAE4B42A00A8B27A59278E70ACE0030@EXCHANGE.trad.tradestation.com>
On Mon, Apr 20, 2009 at 04:18:09PM -0400, John Dlugosz wrote:
Show 15 quoted lines
> $ git push
> Counting objects: 9, done.
> Compressing objects: 100% (8/8), done.
> Writing objects: 100% (8/8), 3.62 KiB, done.
> Total 8 (delta 4), reused 0 (delta 0)
> Unpacking objects: 100% (8/8), done.
> fatal: unresolved deltas left after unpacking
> error: unpack failed: unpacker exited with error code
> To //tx01fs01/sys/dev/git/repositories/aardvark.git
>  ! [remote rejected] dev -> dev (n/a (unpacker error))
> error: failed to push some refs to
> '//tx01fs01/sys/dev/git/repositories/aardvark
> .git'
> 
> Huh?  I'm having trouble defending git's reputation.
Yeah, that is horribly cryptic. What is happening is:
  1. send-pack on the local system spawns receive-pack on the
     remote, which in turn spawns unpack-objects as a helper
  2. unpack-objects barfs with
       fatal: unresolved deltas left after unpacking
     to stderr which is the actual useful bit.
  3. receive-pack notices that the unpacker failed, and spews
       error: unpack failed: unpacker exited with error code
     to stderr, in case unpack-objects didn't say anything.
  4. receive-pack also marks the "status" passed back to send-pack
     as "n/a (unpacker error)"
  5. send-pack gives you the usual nice status table with the ugly
     status from receive-pack marked in it, and then says "OK, I failed
     to push".

So making it better is not quite as simple as you might hope, since there are three processes involved, and none knows that the other has spewed to stderr already. But I think there is some low-hanging fruit:

  1. There is no point in receive-pack saying anything to stderr about
     the unpacker failing; in most cases, the unpacker already said
     something, and even if it didn't, we are reporting the problem to
     send-pack in the status field.
  2. "n/a (unpacker error)" is unnecessarily cryptic. Yes, the specifics
     of the message are "not available" (which is presumably what the
     n/a stands for), but the user doesn't care. I think something like
     "failed to unpack objects" would be better.

That leaves only the fact that the _specific_ reason the unpacker failed is not part of the usual status table. Fixing that is actually a little tricky because of the multiple processes involved (which do not already have a string-based communications channel between them).

And of course, it's still a bit cryptic to get "unresolved deltas after unpacking". However, that is one of those messages that _should_ never come up, unless the sender is pushing a bogus pack. I wouldn't be surprised if it an msysgit bug.

-Peff
Previous: John DlugoszNext: Jeff King
Message 4 of 8 in “Cryptic error messages?”
  1. John DlugoszApr 20, 2009
  2. Dmitry PotapovApr 21, 2009
  3. John DlugoszApr 21, 2009
  4. Jeff KingApr 22, 2009
  5. Jeff KingApr 22, 2009
  6. Junio C HamanoApr 22, 2009
  7. Jeff KingApr 22, 2009
  8. John DlugoszApr 22, 2009

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.