Thread (8 messages) flat view 8 messages, 3 authors, 2016-06-15

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

From: Jens Lehmann <hidden>
Date: 2016-06-15 22:55:39

Possibly related (same subject, not in this thread)

Am 05.01.2013 15:01, schrieb Jens Lehmann:
Am 04.01.2013 22:51, schrieb Junio C Hamano:
quoted
Manlio Perillo [off-list ref] writes:
quoted
$ 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 ...
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help