mirror of
https://github.com/git/git.git
synced 2026-03-20 05:30:12 +01:00
Until now you had to call "git submodule update" (without -N|--no-fetch option) or something like "git submodule foreach git fetch" to fetch new commits in populated submodules from their remote. This could lead to "(commits not present)" messages in the output of "git diff --submodule" (and in "git gui" and "gitk") after fetching or pulling new commits in the superproject and is an obstacle for implementing recursive checkout of submodules. This patch recursively fetches each populated submodule from the url configured in the .git/config of the submodule at the end of each "git fetch" or during "git pull" in the superproject. This new behavior can be disabled by using the new --no-recursive option. t7403 had to be changed to use the --no-recursive option for pull. Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
65 lines
1.3 KiB
Bash
Executable File
65 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2008 David Aguilar
|
|
#
|
|
|
|
test_description='git submodule sync
|
|
|
|
These tests exercise the "git submodule sync" subcommand.
|
|
'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
echo file > file &&
|
|
git add file &&
|
|
test_tick &&
|
|
git commit -m upstream &&
|
|
git clone . super &&
|
|
git clone super submodule &&
|
|
(cd super &&
|
|
git submodule add ../submodule submodule &&
|
|
test_tick &&
|
|
git commit -m "submodule"
|
|
) &&
|
|
git clone super super-clone &&
|
|
(cd super-clone && git submodule update --init)
|
|
'
|
|
|
|
test_expect_success 'change submodule' '
|
|
(cd submodule &&
|
|
echo second line >> file &&
|
|
test_tick &&
|
|
git commit -a -m "change submodule"
|
|
)
|
|
'
|
|
|
|
test_expect_success 'change submodule url' '
|
|
(cd super &&
|
|
cd submodule &&
|
|
git checkout master &&
|
|
git pull
|
|
) &&
|
|
mv submodule moved-submodule &&
|
|
(cd super &&
|
|
git config -f .gitmodules submodule.submodule.url ../moved-submodule &&
|
|
test_tick &&
|
|
git commit -a -m moved-submodule
|
|
)
|
|
'
|
|
|
|
test_expect_success '"git submodule sync" should update submodule URLs' '
|
|
(cd super-clone &&
|
|
git pull --no-recursive &&
|
|
git submodule sync
|
|
) &&
|
|
test -d "$(git config -f super-clone/submodule/.git/config \
|
|
remote.origin.url)" &&
|
|
(cd super-clone/submodule &&
|
|
git checkout master &&
|
|
git pull
|
|
)
|
|
'
|
|
|
|
test_done
|