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

Re: [BUG] git submodule update is not fail safe

From
Jens Lehmann <jens.lehmann@web.de>
Date
Jan 5, 2013, 14:07 UTC
Message-ID
<50E8338D.4080703@web.de>
In-Reply-To
<50E83001.9000505@gmail.com>
Am 05.01.2013 14:52, schrieb Manlio Perillo:
Show 44 quoted lines
> Il 04/01/2013 22:51, Junio C Hamano ha scritto:
>> Manlio Perillo <manlio.perillo@gmail.com> writes:
> 
>>> $ git submodule update --init
>>> ...
>>> Submodule 'roms/vgabios' (git://git.qemu.org/vgabios.git/) registered
>>> for path 'roms/vgabios'
>>> fatal: unable to connect to anongit.freedesktop.org:
>>> anongit.freedesktop.org[0: 131.252.210.161]: errno=Connection timed out
>>>
>>> Unable to fetch in submodule path 'pixman'
>>>
>>> $ git submodule update --init
>>> fatal: Needed a single revision
>>> Unable to find current revision in submodule path 'pixman'
>>>
>>> The problem is easy to solve: manually remove the pixman directory;
>>> however IMHO git submodule update should not fail this way since it may
>>> confuse the user.
> 
>> Sounds like a reasonable observation.  Jens, Heiko, comments?
> 
> I have found another, related problem.
> 
> Today I tried to update qemu submodules again, however the command
> failed with an "obscure" error message:
> 
> $ git submodule update pixman
> fatal: Needed a single revision
> Unable to find current revision in submodule path 'pixman'
> 
> 
> The pixman submodule is the one that I failed to update in the very begin.
> The problem is not with the pixman or qemu repository: if I clone again
> qemu (with the --recursive option), all is ok.
> 
> The problem is with the private working copy (in .git/modules/pixman)
> being corrupted:
> 
> $git log
> fatal: bad default revision 'HEAD'.
> 
> The HEAD file contains "ref: refs/heads/master", but the refs/heads
> directory is empty.

Yep, as I explained in my other email the partially set up .git/modules/pixman is the reason for the trouble you have.

Show 10 quoted lines
> By the way: since git submodule is a porcelain command, IMHO it should
> not show to the user these low level error message; at least it should
> give more details.
> As an example, in this case it could say something like:
> 
>   the local module "pixmap" seems to be corrupted.
>   Run xxx to remove the module and yyy to create it again.
> 
> The ideal solution is, for submodule update, to never leave an
> incomplete directory; that is: the update command should be atomic.

I agree that submodule update should not leave an inconsistent state. In that case you wouldn't see any low level error messages (which I think is ok if something the porcelain didn't expect to happen occurs, like it did here).

Previous: Manlio PerilloNext: Jens Lehmann
Message 4 of 24 in “[BUG] git submodule update is not fail safe”
  1. Manlio PerilloJan 4, 2013
  2. Junio C HamanoJan 4, 2013
  3. Manlio PerilloJan 5, 2013
  4. Jens LehmannJan 5, 2013
  5. Jens LehmannJan 5, 2013
  6. Manlio PerilloJan 5, 2013
  7. Jens LehmannJan 5, 2013
  8. clone: support atomic operation with --separate-git-dirJens Lehmann, Jan 5, 2013
  9. Manlio PerilloJan 5, 2013
  10. Junio C HamanoJan 6, 2013
  11. Duy NguyenJan 6, 2013
  12. Jonathan NiederJan 6, 2013
  13. clone: forbid --bare --separate-git-dir <dir>Nguyễn Thái Ngọc Duy, Jan 6, 2013
  14. Jonathan NiederJan 6, 2013
  15. Junio C HamanoJan 6, 2013
  16. Duy NguyenJan 7, 2013
  17. Junio C HamanoJan 7, 2013
  18. Duy NguyenJan 8, 2013
  19. Jens LehmannJan 8, 2013
  20. Junio C HamanoJan 8, 2013
  21. Duy NguyenJan 8, 2013
  22. Junio C HamanoJan 8, 2013
  23. clone: forbid --bare --separate-git-dir <dir>Nguyễn Thái Ngọc Duy, Jan 11, 2013
  24. Junio C HamanoJan 11, 2013

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.