git-submodule.sh: try harder to fetch a submodule
commite30d833671d634ea6455fd49596ac7339a4915b1
authorStefan Beller <sbeller@google.com>
Tue, 15 May 2018 19:40:54 +0000 (15 12:40 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 16 May 2018 01:07:21 +0000 (16 10:07 +0900)
tree038f1f648540d8fb16a6edee60dfde382017df87
parent468165c1d8a442994a825f3684528361727cd8c0
git-submodule.sh: try harder to fetch a submodule

This is the logical continuum of fb43e31f2b4 (submodule: try harder to
fetch needed sha1 by direct fetching sha1, 2016-02-23) and fixes it as
some assumptions were not correct.

The commit states:
> If $sha1 was not part of the default fetch ... fail ourselves here
> assumes that the fetch_in_submodule only fails when the serverside does
> not support fetching by sha1.

There are other failures, why such a fetch may fail, such as
    fatal: Couldn't find remote ref HEAD
which can happen if the remote side doesn't advertise HEAD and we do not
have a local fetch refspec.

Not advertising HEAD is allowed by the protocol spec and would happen,
if HEAD points at an unborn branch for example.

Not having a local fetch refspec can happen when submodules are fetched
shallowly, as then git-clone doesn't setup a fetch refspec.

So do try even harder for a submodule by ignoring the exit code of the
first fetch and rather relying on the following is_tip_reachable to
see if we try fetching again.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-submodule.sh