Re: [BUG] git submodule update is not fail safe
- From
Jens Lehmann <jens.lehmann@web.de>
- Date
- Jan 5, 2013, 14:50 UTC
- Message-ID
- <50E83DAE.1080500@web.de>
- In-Reply-To
- <50E83224.2070701@web.de>
Am 05.01.2013 15:01, schrieb Jens Lehmann:
Show 30 quoted lines
> Am 04.01.2013 22:51, schrieb Junio C Hamano: >> 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? > > The reason seems to be that clone leaves a partial initialized .git > directory in case of connection problems. The next time submodule > update runs it tries to revive the submodule from .git/modules/<name> > but fails as there are no objects in it. > > This looks like a bug in clone to me, as it takes precautions to clean > up if something goes wrong but doesn't do that in this case. But while > glancing over the code I didn't find out what goes wrong here.
I dug a bit deeper here and found the reason: In remove_junk() of builtin/clone.c the junk_git_dir points to the gitfile in the submodules work tree, not the .git/modules/<name> directory where clone was told to put the git directory. Will see if I can come up with a patch soonish ...