Am 04.01.2013 22:51, schrieb Junio C Hamano:
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.
If this isn't seen as a bug in clone, we could also remove the
.git/modules/<name> directory in module_clone() of git-submodule.s
h when the clone fails. Manilo, does the following patch remove the
problems you are seeing (after removing .git/modules/pixman manually)?
diff --git a/git-submodule.sh b/git-submodule.sh
index 2365149..4098702 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -208,7 +208,10 @@ module_clone()
git clone $quiet -n ${reference:+"$reference"} \
--separate-git-dir "$gitdir" "$url" "$sm_path"
) ||
- die "$(eval_gettext "Clone of '\$url' into submodule path '\$sm_path' failed")"
+ (
+ rm -rf "$gitdir" &&
+ die "$(eval_gettext "Clone of '\$url' into submodule path '\$sm_path' failed")"
+ )
fi
# We already are at the root of the work tree but cd_to_toplevel will