This adds a sequence of tests to assure that the following two sequences work: git clone -o frotz <someurl> foo cd foo git submodule init git submodule update This should result in the master and subproject having "frotz" as the name of the default remote (and origin undefined). Then, in the same working directory git remote add fork <some url> git fetch fork git checkout --track -b fork fork/<somebranch> git submodule init git submodule update will retrive new submodules from remote "fork", and define fork in the existing modules. Origin remains undefined. Note: this latter case is a clear motivation for overriding "origin": after the second test, the various submodules would have different ideas of remote "origin": these would point to different servers. This would entirely prevent the top-level branch.<name>.remote machinery from controlling the project as there is no uniform naming of remotes. Signed-off-by: Mark Levedahl <mlevedahl@xxxxxxxxx> --- t/t7401-submodule-remote.sh | 104 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 104 insertions(+), 0 deletions(-) create mode 100755 t/t7401-submodule-remote.sh diff --git a/t/t7401-submodule-remote.sh b/t/t7401-submodule-remote.sh new file mode 100755 index 0000000..1a793db --- /dev/null +++ b/t/t7401-submodule-remote.sh @@ -0,0 +1,104 @@ +#!/bin/sh + +test_description='Porcelain support for submodules with multiple remotes + +This test verifies operation of submodules using multiple remotes and +differing remote per top-level branch. This includes ability to name the +default something other than origin, to follow the top-level +remote.<branch>, and to propagate definition of new remotes down to +submodules as needed. +' + +. ./test-lib.sh + +# the standard tests all work with one repo, but we need several.. +rm -rf .git + +test_expect_success 'Prepare master repository with 1 submodule' ' + ( + mkdir master && + cd master && + git init && + echo "on master" > master.txt && + git add master.txt && + git commit -m "Add master.txt" && + mkdir submod1 && + cd submod1 && + git init && + echo "submod1" > submod1.txt && + git add submod1.txt && + git commit -m "Added submod1.txt" && + cd .. && + git submodule add ./submod1 submod1 && + git commit -m "Added submodule submod1" + ) +' + +test_expect_success 'Clone master as fork' ' + ( + git clone master fork && + cd fork && + test "$(git remote)" = "origin" && + git submodule init && + git submodule update && + test -e submod1/.git + ) +' + +test_expect_success 'Add second submodule in fork' ' + ( + cd fork && + mkdir submod2 && + cd submod2 && + git init && + echo "submod2" > submod2.txt && + git add submod2.txt && + git commit -m "Added submod2.txt" && + cd .. && + git submodule add ./submod2 submod2 && + git commit -m "Added submodule submod2 on fork" + ) +' + +test_expect_success 'Clone master using frotz instead of origin' ' + ( + git clone -o frotz master worker && + cd worker && + test "$(git remote)" = "frotz" + ) +' + +test_expect_success 'Get submodules using frotz instead of origin' ' + ( + cd worker && + git submodule init && + git submodule update && + test -e submod1/.git && + cd submod1 && + test "$(git remote)" = "frotz" + ) +' + +test_expect_success 'Update using fork to get additional submodule' ' + ( + cd worker && + git remote add fork $(pwd)/../fork && + git fetch fork && + git checkout --track -b fork_master fork/master && + git submodule init && + git submodule update && + test -e submod2/.git && + cd submod2 && + test "$(git remote)" = "fork" && + cd ../submod1 && + remotes1=$(git remote) && + case $remotes1 in + fork*frotz|frotz*fork) + true ;; + *) + false ;; + esac + ) +' + +test_done -- 1.5.4.18.g43c18 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html