submodule update --init: correct path handling in recursive submodules
When calling `git submodule init` from a recursive instance of `git submodule update --recursive`, the reported path is wrong as it skips the nested submodules. The new test demonstrates a failure in the code prior to this patch. Instead of getting the expected Submodule 'submodule' (${pwd}/submodule) registered for path '../super/submodule' the `super` directory is omitted and you get Submodule 'submodule' (${pwd}/submodule) registered for path '../submodule' instead. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ea2fa1040d
commit
c1ab00fb26
@ -473,7 +473,7 @@ cmd_init()
|
||||
die_if_unmatched "$mode"
|
||||
name=$(git submodule--helper name "$sm_path") || exit
|
||||
|
||||
displaypath=$(relative_path "$sm_path")
|
||||
displaypath=$(relative_path "$prefix$sm_path")
|
||||
|
||||
# Copy url setting when it is not set yet
|
||||
if test -z "$(git config "submodule.$name.url")"
|
||||
|
@ -63,6 +63,10 @@ test_expect_success 'setup a submodule tree' '
|
||||
git submodule add ../none none &&
|
||||
test_tick &&
|
||||
git commit -m "none"
|
||||
) &&
|
||||
git clone . recursivesuper &&
|
||||
( cd recursivesuper
|
||||
git submodule add ../super super
|
||||
)
|
||||
'
|
||||
|
||||
@ -95,6 +99,35 @@ test_expect_success 'submodule update from subdirectory' '
|
||||
)
|
||||
'
|
||||
|
||||
supersha1=$(git -C super rev-parse HEAD)
|
||||
mergingsha1=$(git -C super/merging rev-parse HEAD)
|
||||
nonesha1=$(git -C super/none rev-parse HEAD)
|
||||
rebasingsha1=$(git -C super/rebasing rev-parse HEAD)
|
||||
submodulesha1=$(git -C super/submodule rev-parse HEAD)
|
||||
pwd=$(pwd)
|
||||
|
||||
cat <<EOF >expect
|
||||
Submodule path '../super': checked out '$supersha1'
|
||||
Submodule 'merging' ($pwd/merging) registered for path '../super/merging'
|
||||
Submodule 'none' ($pwd/none) registered for path '../super/none'
|
||||
Submodule 'rebasing' ($pwd/rebasing) registered for path '../super/rebasing'
|
||||
Submodule 'submodule' ($pwd/submodule) registered for path '../super/submodule'
|
||||
Submodule path '../super/merging': checked out '$mergingsha1'
|
||||
Submodule path '../super/none': checked out '$nonesha1'
|
||||
Submodule path '../super/rebasing': checked out '$rebasingsha1'
|
||||
Submodule path '../super/submodule': checked out '$submodulesha1'
|
||||
EOF
|
||||
|
||||
test_expect_success 'submodule update --init --recursive from subdirectory' '
|
||||
git -C recursivesuper/super reset --hard HEAD^ &&
|
||||
(cd recursivesuper &&
|
||||
mkdir tmp &&
|
||||
cd tmp &&
|
||||
git submodule update --init --recursive ../super >../../actual
|
||||
) &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
apos="'";
|
||||
test_expect_success 'submodule update does not fetch already present commits' '
|
||||
(cd submodule &&
|
||||
|
Loading…
Reference in New Issue
Block a user