submodule update: respect depth in subsequent fetches
When depth is given the user may have a reasonable expectation that any remote operation is using the given depth. Add a test to demonstrate we still get the desired sha1 even if the depth is too short to include the actual commit. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
d4470c5a46
commit
6cbf454a2e
|
@ -479,7 +479,8 @@ fetch_in_submodule () (
|
||||||
'')
|
'')
|
||||||
git fetch ;;
|
git fetch ;;
|
||||||
*)
|
*)
|
||||||
git fetch $(get_default_remote) "$2" ;;
|
shift
|
||||||
|
git fetch $(get_default_remote) "$@" ;;
|
||||||
esac
|
esac
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -617,7 +618,7 @@ cmd_update()
|
||||||
if test -z "$nofetch"
|
if test -z "$nofetch"
|
||||||
then
|
then
|
||||||
# Fetch remote before determining tracking $sha1
|
# Fetch remote before determining tracking $sha1
|
||||||
fetch_in_submodule "$sm_path" ||
|
fetch_in_submodule "$sm_path" $depth ||
|
||||||
die "$(eval_gettext "Unable to fetch in submodule path '\$sm_path'")"
|
die "$(eval_gettext "Unable to fetch in submodule path '\$sm_path'")"
|
||||||
fi
|
fi
|
||||||
remote_name=$(sanitize_submodule_env; cd "$sm_path" && get_default_remote)
|
remote_name=$(sanitize_submodule_env; cd "$sm_path" && get_default_remote)
|
||||||
|
@ -640,13 +641,13 @@ cmd_update()
|
||||||
# Run fetch only if $sha1 isn't present or it
|
# Run fetch only if $sha1 isn't present or it
|
||||||
# is not reachable from a ref.
|
# is not reachable from a ref.
|
||||||
is_tip_reachable "$sm_path" "$sha1" ||
|
is_tip_reachable "$sm_path" "$sha1" ||
|
||||||
fetch_in_submodule "$sm_path" ||
|
fetch_in_submodule "$sm_path" $depth ||
|
||||||
die "$(eval_gettext "Unable to fetch in submodule path '\$displaypath'")"
|
die "$(eval_gettext "Unable to fetch in submodule path '\$displaypath'")"
|
||||||
|
|
||||||
# Now we tried the usual fetch, but $sha1 may
|
# Now we tried the usual fetch, but $sha1 may
|
||||||
# not be reachable from any of the refs
|
# not be reachable from any of the refs
|
||||||
is_tip_reachable "$sm_path" "$sha1" ||
|
is_tip_reachable "$sm_path" "$sha1" ||
|
||||||
fetch_in_submodule "$sm_path" "$sha1" ||
|
fetch_in_submodule "$sm_path" $depth "$sha1" ||
|
||||||
die "$(eval_gettext "Fetched in submodule path '\$displaypath', but it did not contain \$sha1. Direct fetching of that commit failed.")"
|
die "$(eval_gettext "Fetched in submodule path '\$displaypath', but it did not contain \$sha1. Direct fetching of that commit failed.")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -856,6 +856,22 @@ test_expect_success 'submodule update clone shallow submodule' '
|
||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'submodule update clone shallow submodule outside of depth' '
|
||||||
|
test_when_finished "rm -rf super3" &&
|
||||||
|
git clone cloned super3 &&
|
||||||
|
pwd=$(pwd) &&
|
||||||
|
(
|
||||||
|
cd super3 &&
|
||||||
|
sed -e "s#url = ../#url = file://$pwd/#" <.gitmodules >.gitmodules.tmp &&
|
||||||
|
mv -f .gitmodules.tmp .gitmodules &&
|
||||||
|
test_must_fail git submodule update --init --depth=1 2>actual &&
|
||||||
|
test_i18ngrep "Direct fetching of that commit failed." actual &&
|
||||||
|
git -C ../submodule config uploadpack.allowReachableSHA1InWant true &&
|
||||||
|
git submodule update --init --depth=1 >actual &&
|
||||||
|
test 1 = $(git -C submodule log --oneline | wc -l)
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'submodule update --recursive drops module name before recursing' '
|
test_expect_success 'submodule update --recursive drops module name before recursing' '
|
||||||
(cd super2 &&
|
(cd super2 &&
|
||||||
(cd deeper/submodule/subsubmodule &&
|
(cd deeper/submodule/subsubmodule &&
|
||||||
|
|
Loading…
Reference in New Issue